javascript - jQuery 检查 url 是否响应

标签 javascript jquery

首先我读过this question我发现这非常有用。

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

我尝试实现上述问题中的代码,但我发现很难将其合并到我的代码中,因为我不明白他试图在回调中提到什么。

所以我有两个功能:

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,我对海报和他的回答感到非常困惑;)

非常感谢任何帮助。

最佳答案

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 个回调而不是一个,没有必要强制一个方法执行明显打算由 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);

一些注意事项:

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

当然,urlExists 是一个根本不需要的包装器,您可以直接在 AJAX 调用中使用您的 url 和回调,但这样看起来更清晰、更容易理解并且更可重用。

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

关于javascript - jQuery 检查 url 是否响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28456909/

相关文章:

javascript - javascript中的链相等运算符

javascript - 从网站按钮输出表单收集数据

javascript - 从 dom 元素获取窗口对象的引用

javascript - 单击第二个按钮,我希望第一个和第二个按钮都着色

javascript - 如何使用 HTML 和 CSS 或 jQuery 和 CSS 创建类似工具提示的 'linklist'?

javascript - 如何使用 Handlebars.js 在 nest.js 中设置默认布局?

javascript - MongoDB oplog 流 Node.js

javascript - 正则表达式,替换所有以@开头的单词

javascript - 在 AJAX 内容渲染之前加载所有 JS 和 CSS

jquery - 为什么我的搜索表单第一次不进行搜索?