我连续进行了多个Ajax调用后出局,并且在所有请求结束后再执行其他操作。
第一轮工作正常,因为所有请求均返回成功200 。但是,由于某些Ajax调用无法响应(它们给出404),因此第二轮在此处无法输入done()方法。假设调用ajaxCall(url5)通过输入自己的错误函数而失败。
但是,我仍然想在done()方法中调用一个方法,以便可以利用从成功调用中获得的响应。
有任何想法为什么当一个调用失败时,done()不起作用?或者如何确保在进行所有调用时无论状态是成功还是错误,我都能在正确的位置上?
function ajaxCall(endpoint){
return $.ajax({
url: endpoint,
cache: false,
error: function (xhr, ajaxOptions, thrownError) {
console.log("404");
},
success: function(response) {
result = $(response).find("#boxContent");
$(".boxContainer").append(result[0].innerHTML);
}
});
}
$.when(ajaxCall(url1),
ajaxCall(url2),
ajaxCall(url3),
ajaxCall(url4),
ajaxCall(url5)).then(function(){
console.log("All requests issued.");
}, function() {
console.log("One of the sources is not available*****************");
hasAnyFailed = true;
}).done(function( a1, a2, a3, a4, a5){
// When all calls return
console.log("DONE*********);
doSomethingElse();
});
PS:我找到了这种SO解决方案,但不确定是否有像内置JS方法这样的更新解决方案。 https://stackoverflow.com/a/7881733/2790804