簡體   English   中英

在 Jquery/Javascript 中檢查 URL

[英]Checking a Url in Jquery/Javascript

我所需要的只是一個在 URL 響應時返回 true 的方法。 不幸的是,我是 jQuery 的新手,它讓我編寫該方法的嘗試相當令人沮喪。

我已經看過幾個使用 .ajax 的 jQuery 示例,但是代碼一直在我身上失敗。 怎么了?

var urlExists = function(url){
    //When I call the function, code is still executing here.
    $.ajax({
        type: 'HEAD',
        url: url,
        success: function() {
            return true;
        },
        error: function() {
            return false;
        }            
    });
    //But not here...
}

這不是 AJAX 的工作方式。 AJAX 本質上是異步的(這實際上是第一個 'A' 所代表的),這意味着您調用一個函數並傳入一個回調,而不是調用一個函數並返回一個值,然后將使用該值調用該回調.

(參見http:\/\/en.wikipedia.org\/wiki\/Continuation_passing_style<\/a> 。)

知道 URL 是否響應后,您想做什么? 如果您打算像這樣使用此方法:

//do stuff
var exists = urlExists(url);
//do more stuff based on the boolean value of exists

urlExists()<\/code>無法返回,因為它需要等待請求。

要么給它一個回調,要么讓它同步(不推薦,因為它會鎖定瀏覽器)。

var urlExists = function(url, callback) {

    if ( ! $.isFunction(callback)) {
       throw Error('Not a valid callback');
    }   

    $.ajax({
        type: 'HEAD',
        url: url,
        success: $.proxy(callback, this, true),
        error: $.proxy(callback, this, false)      
    });

};

基本上,您的代碼沒有任何問題。 在這里看到它的工作:http: \/\/jsfiddle.net\/PK76X\/<\/a>

我的猜測是您正在使用它來檢查不同域上內容的可用性,這會失敗,因為瀏覽器不允許跨域 ajax 請求。

如果 url 來自與您的頁面相同的域,您可以這樣做。 但是如果它來自不同的域,例如 google.com,那么由於跨域安全性,它將失敗。

一般來說,您可能應該使用 firebug 插件在 Firefox 中運行您的腳本。 它將為您提供解決問題所需的詳細信息。

ajax 和 post 方法是異步的,因此您應該在回調方法中處理結果。

AJAX 基本上是異步的,這就是您所描述的行為的原因。 我使用了以下內容,它是免費的,以同步方式獲得一個簡單的真\/假指示 URL 是否有效:

function isValidURL(url) {
    var encodedURL = encodeURIComponent(url);
    var isValid = false;

    $.ajax({
      url: "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D%22" + encodedURL + "%22&format=json",
      type: "get",
      async: false,
      dataType: "json",
      success: function(data) {
        isValid = data.query.results != null;
      },
      error: function(){
        isValid = false;
      }
    });

    return isValid;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM