我的第一个问题是,我正在寻找一种方法,如果用户在发出请求时离开页面,则会自动中止AJAX请求。我发现this有用的解决方案解决了该问题。现在我的问题是,在中止应用程序中的特定AJAX请求时,会将用户定向到错误页面(我相信这是某些错误回调中预期的行为),在这种情况下,我不希望这样做当用户在请求期间只是浏览到另一个页面时。
我希望做的是继续使用上面链接的解决方案,但是以防止执行错误回调的方式对其进行修改。我知道我可以在错误回调中检查状态和readystate属性,但这意味着我将不得不在整个应用程序的所有AJAX请求中包括这些检查,并且这种维护不太容易。我的目标是将这种逻辑全部放在一个地方,或者至少在尽可能少的地方。
我已经尝试了以下方法,但是没有运气。看来先执行本地错误回调,然后执行执行到全局处理程序,然后再执行为时已晚。
任何帮助将不胜感激。谢谢
function onPageLoaded() {
var jqxhrs = [];
$(window).bind("beforeunload", function (event) {
$.each(jqxhrs, function (idx, jqxhr) {
if (jqxhr) {
jqxhr.abort();
}
});
});
$(document).ajaxError(function (e, jqXHR, ajaxSettings, thrownError) {
if (jqXHR.status === 0 || jqXHR.readyState === 0) {
return;
}
});
function registerJqxhr(event, jqxhr, settings) {
jqxhrs.push(jqxhr);
}
function unregisterJqxhr(event, jqxhr, settings) {
var idx = $.inArray(jqxhr, jqxhrs);
jqxhrs.splice(idx, 1);
}
$(document).ajaxSend(registerJqxhr);
$(document).ajaxComplete(unregisterJqxhr);
}
答案 0 :(得分:0)
您可以在代码中的某处尝试
var response=Promise.all([ajaxcall1,ajaxcall2,ajaxcall3,....])
如果其中一个承诺没有得到解决,那么您就可以处理错误
response.then((resp)=> //your code to handle resp )
.catch ((error)=>{ //handle error here})