5

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

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

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调用的角度回答这个问题。

这可能吗?

4

5 回答 5

13

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

var resp = $.ajax({});

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

其他状态是rejectedand pending,请参阅http://api.jquery.com/deferred.state/

当然,您也可以获得这些Deferred对象的所有优点,例如在之后为某些事情添加更多事件处理程序.done()( 、.fail()等),或者只是等待使用$.when().

于 2012-10-26T13:03:53.883 回答
6

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

$.ajax({
  url: "foo1.html"
}).done(function() { 
  alert('Done!');
});
于 2012-10-26T13:03:15.790 回答
5

我会在 AJAX 调用之前设置变量并在成功回调中将其重置,如下所示:

var isRunning = true;

$.ajax({
    url: url,
    success: function(resp){
      isRunning = false;
    }
});
于 2012-10-26T13:04:30.603 回答
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
   });
}
于 2014-08-20T08:04:35.163 回答
0

将调用包装在 try catch 中。

如果由于服务器上不存在该方法而导致对 'foo1' 的调用失败,则在 catch 调用中调用 foo 两个然后三个,直到你用尽了所有的后备。

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

于 2012-10-26T13:04:36.797 回答