jQuery检查url是否响应

jQuery check if url responsing

本文关键字:响应 是否 url 检查 jQuery      更新时间:2023-09-26

首先,我读过这个问题,觉得很有用。

我正在尝试检测url是否有响应。如果是,则使用此url并启动另一个函数。如果为false,则创建一个新url并启动其他函数。

我试图实现上面提到的问题中的代码,但我发现很难将其纳入我的代码中,因为我不理解他试图用callback提到什么。

所以我有两个功能:

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

此外,我有一个变量url,我正在尝试测试该url是否响应,所以它是否有效。

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,海报和他的答案让我很困惑;)

非常感谢您的帮助。

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)的使用,这不是你想要的,所以下面是我改进该代码的方法:

首先,我们需要两个回调,而不是一个,不需要强制一个方法执行两个不同方法显然要处理的操作。

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调用的相同URL,请告诉我,我将相应地更改示例。如果没有,只需将您想要使用的url放在引号内即可。

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

对于ANY错误,此代码将执行errorCallback;如果没有发生错误,则执行successCallback。这实际上可能不是你想要的,尤其是如果你认为AFAIK 3xx状态代码被认为是一个错误。为了获得更精细的控制,您可以为每个状态代码定义回调,或者只为其中的一些代码定义回调。如果您愿意,我可以更新我的示例,请告诉我。

请检查此项。和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/

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在代码中使用单词callback时,他指的只是一个变量。你可以用任何像testabc这样的工作来替换单词callback,它仍然会产生相同的结果。

希望这能帮助