jQuery检查url是否有响应

时间:2015-02-11 14:34:39

标签: javascript jquery

首先,我读了this question,我发现它非常有用。

我试图检测网址是否响应。如果是,那么使用此URL并启动另一个函数,如果为false,则创建一个新的url并启动另一个函数。

我尝试从上面提到的问题中实现代码,但我发现很难将其合并到我的代码中,因为我不明白他试图用callback提到的内容。

所以我所拥有的是两个功能:

function relatedProducts(relatedUrl){
  $.getJSON(relatedUrl, function(data){
    ......
  });
}
function liveSearch(liveSearchUrl){
  $.getJSON(liveSearchUrl, function(data){
    ......
  });
}

此外,我有一个可变网址,我试图测试该网址是否响应,如果它有效则不会。

var url ='apple/i-phone/iphone5';

function urlExists(url, exists){
 $.ajax({
   type: 'HEAD',
   url: url,
   success: function(){

      // what do I have to do here??? 
         Poster is mentioning `callback` but which one??
      },
      error: function(){

      // what do I have to do here??? 
         Poster is mentioning `callback` but which one??
      }
    });
  }

  urlExists(url, function(exists){
    if(true){
     var relatedUrl = ??
     relatedProducts(relatedUrl);
    } else {
     var liveSearchUrl = ??
     liveSearch(liveSearchUrl);
  });

我还在学习jQuery,我对海报及其答案感到很困惑;)

任何帮助非常感谢。

3 个答案:

答案 0 :(得分:1)

AJAX是异步的,因此对AJAX方法的调用是非阻塞的。因此,当控制流返回给调用者并且后续函数调用不应依赖于已完成的AJAX调用时,您无法期望AJAX方法的任何结果可用。

简单示例:

doSomeStuff($.ajax(...)); //doesn't work

其他例子:

var x = false;
$.ajax({
    url: url,
    success: function(){
        x = true;
    }
});
if (x) {
    // probably doesn't work
}

回调函数进入的地方:一旦完成,你可以告诉对AJAX方法的调用。这些是您示例中的successerror参数。

现在举个具体的例子。我发现你把大部分内容都从一个类似问题的答案中复制了,但是我发现它有几个问题,除了你使用if (true)之外,这不是你想要的,所以这里是我的注意改进代码:

首先,我们需要2个回调而不是1回调,没有必要强制一个方法去做那些明显意图由2种不同方法处理的方法。

var successCallback = function() {
  var relatedUrl = '' // see note below code block
  relatedProducts(relatedUrl);
}    
var errorCallback = function() {
  var liveSearchUrl = ''// see note below code block
  liveSearch(liveSearchUrl);
}

接下来,让我们更改您的urlExists

function urlExists(url, sCallb, eCallb){
  $.ajax({
    type: 'HEAD',
    url: url,
    success: sCallb,
    error: eCallb
  });
}

最后,这就是你把这些部分放在一起的方式:

var url ='apple/i-phone/iphone5';
urlExists(url,successCallback,errorCallback);

一些注意事项:

如果您希望relatedUrlliveSearchUrl与用于ajax调用的网址相同,请告诉我,我会相应更改我的示例。如果没有,只需将您想要使用的网址放在引号内。

当然,urlExists是一个甚至不需要的包装器,你可以直接在AJAX调用中使用你的url和回调,但这样看起来更干净,更容易理解而且更加可重复使用。

此代码将针对 ANY 错误执行errorCallback,如果未发生错误,则执行successCallback。这实际上可能不是您想要的,特别是如果您认为AFAIK 3xx状态代码被视为错误。为了获得更好的控制,你可以为每个状态代码定义回调,或者只为其中一些定义回调,如果你想我可以更新我的例子,请告诉我。

答案 1 :(得分:0)

Callback只是函数返回的值。

当OP说明callback时,在ans的解释中,他正在引用返回值的地址。

例如:在var a = '10' a中是地址,10是存储在其中的值。

现在考虑一个返回一些值的函数b()

function b(){
var a ='a';
return a;
}

var something = b(); // here **something** can be seen as callback of b()

现在,当OP在code中使用单词callback时,他只是提到变量。您可以将callback替换为testabc等任何作品,但仍会产生相同的效果。

希望这有帮助

答案 2 :(得分:0)

请检查一下。就像nob一样。

var callback  =  function (x){ 
        if(x)
            alert ("You can make real call to this url"); 
        else
            alert ("Somthing worng");
        };

$.ajax({
        type: 'HEAD',
        url: "/echo/json",
        success: function() {
            callback(true);

        },
        error: function() {
             callback(false);
        }            
    });

http://jsfiddle.net/PK76X/152/