我知道我的标题不是很清楚。
例如,这是我的代码的结构:
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调用的角度回答问题。
这有可能吗?
答案 0 :(得分:13)
我不确定我是否理解你,但是jQuery会将 Deferred 对象混合到其 jXHR 对象中,你可以检查它的状态。
var resp = $.ajax({});
// somewhere else...
if( resp.state() === 'resolved' ) {
}
其他状态为rejected
和pending
,请参阅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回调中处理返回。