如何使用jQuery检查ajax调用是否存在?

时间:2012-10-26 13:01:03

标签: javascript jquery ajax

我知道我的标题不是很清楚。

例如,这是我的代码的结构:

if (foo == something) {
  // Ajax call 1, let it be $.ajax("foo1.html") and so on
} else {
  // Ajax call 2, let it be $.ajax("foo2.html") and so on
}

我如何测试$.ajax("foo1.html")是否实际运行过?

请不要告诉我再次测试foo == something。我的实际代码要复杂得多,所以请从ajax调用的角度回答问题。

这有可能吗?

5 个答案:

答案 0 :(得分:13)

我不确定我是否理解你,但是jQuery会将 Deferred 对象混合到其 jXHR 对象中,你可以检查它的状态。

var resp = $.ajax({});

// somewhere else...
if( resp.state() === 'resolved' ) {
}

其他状态为rejectedpending,请参阅http://api.jquery.com/deferred.state/

当然,你也可以获得那些 Deferred 对象的所有优点,比如之后为某些事情添加更多事件处理程序.done(),{{1使用.fail()只需等待以获得fullfil的承诺。

答案 1 :(得分:6)

您可以在ajax调用中设置回调:

$.ajax({
  url: "foo1.html"
}).done(function() { 
  alert('Done!');
});

答案 2 :(得分:3)

我会在AJAX调用之前设置变量,并在成功回调中重置它,如:

var isRunning = true;

$.ajax({
    url: url,
    success: function(resp){
      isRunning = false;
    }
});

答案 3 :(得分:1)

我有类似的问题。我用了这段代码:

var isRunning = false; // whether ajax call is running
if(isRunning==false){
   isRunning = true;
   $.ajax({
     // do your stuff
     // make sure you set
     isRunning = false;
     // on success
   });
}

答案 4 :(得分:0)

以试试方式接听电话。

如果对'foo1'的调用失败,因为该方法在服务器上不存在,在catch调用foo中,然后是3,直到你已经用尽所有后退。

如果您知道该方法存在并认为它将失败,那么在其上设置一个状态,如果服务器失败则可以返回该状态,然后在ajax回调中处理返回。