我使用jQuery与jQuery,因为我们知道$.ajax
返回承诺ajaxPromise
。我的要求是:只有当所有的Ajax调用重试失败时,ajaxPromise
捕获失败(我想处理ajax承诺回调函数内的错误)。jQuery ajax - 仅在所有重试失败时触发失败回调函数
我尝试下面的代码:
function ajax(data) {
return $.ajax({
url: "...",
data: data,
triedCount: 0,
retryLimit: 3,
error: function(xhr, textStatus, errorThrown) {
console.log("error: " + this.triedCount);
this.triedCount++;
if (this.triedCount < this.retryLimit) {
$.ajax(this);
}
}
});
}
var ajaxPromise = ajax({"id": "123"});
ajaxPromise.fail(function(xhr) {
console.log("All retries failed...");
// all retries failed, handle error
});
输出什么,我想要的是:
error: 0
error: 1
error: 2
All retries failed...
虽然实际输出为:
error: 0
All retries failed...
error: 1
error: 2
貌似fail
回调后立即触发第一次通话失败,而我想要fail
回拨在所有重试失败后触发。
有没有什么办法,只有当所有的重试失败,然后触发ajaxPromise.fail
回调?还是有其他的选择可以做到这一点?
你知道如何扭曲的范围界定在JavaScript的?我不确定,但我相信在嵌套的ajax调用中,您的'triedCount'变量会丢失。也许尝试传递回调中的变量,然后在ajax调用中作为选项? –
您是否预先知道返回哪个标题?如果是的话,你可以使用statuCode回调。 –
@MridulKashyap'triedCount'变量没有作用域问题:) – coderz