在Jquery/Javascript中检查URL

use*_*632 6 javascript url jquery

我需要的只是一个方法,如果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...
}
Run Code Online (Sandbox Code Playgroud)

Han*_*-Oh 21

这不是AJAX的工作方式.AJAX基本上是异步的(实际上是第一个'A'代表的意思),这意味着而不是你调用一个函数并且它返回一个值,你调用一个函数并传入一个回调函数,并且将使用该函数调用该回调.

(见http://en.wikipedia.org/wiki/Continuation_passing_style.)

在知道URL是否响应后,您想要做什么?如果您打算像这样使用此方法:

//do stuff
var exists = urlExists(url);
//do more stuff based on the boolean value of exists
Run Code Online (Sandbox Code Playgroud)

然后你要做的是:

//do stuff
urlExists(url, function(exists){
  //do more stuff based on the boolean value of exists
});
Run Code Online (Sandbox Code Playgroud)

在哪里urlExists():

function urlExists(url, callback){
  $.ajax({
    type: 'HEAD',
    url: url,
    success: function(){
      callback(true);
    },
    error: function() {
      callback(false);
    }
  });
}
Run Code Online (Sandbox Code Playgroud)


ale*_*lex 6

urlExists() 无法返回,因为它需要等待请求.

传递回调,或使其同步(不推荐,因为它锁定了浏览器).

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)      
    });

};
Run Code Online (Sandbox Code Playgroud)

那你可以做

urlExists('/something', function(success) {
    if (success) {
        alert('Yay!');
    } else {
        alert('Oh no!');
    }
});
Run Code Online (Sandbox Code Playgroud)

值得一提的是相同的原产地政策.

此外,从匿名函数的作用域返回将不会在父函数中返回(就像在原始示例中一样).它只返回内部函数.要从内部返回到父级,请设置一个标志并将其返回.