javascript - 是否可以防止在请求上调用 abort 后触发 AJAX 请求的错误回调?
问题描述
我的第一个问题是,如果用户在发出请求时离开页面,我正在寻找一种自动中止 AJAX 请求的方法。我发现这个有用的解决方案解决了这个问题。现在我的问题是,在我的应用程序中中止特定的 AJAX 请求后,用户会被定向到一个错误页面(我相信这是某些错误回调中的预期行为),我不希望这是这种情况下的行为当用户在请求期间只是导航到不同的页面时。
我希望做的是继续使用上面链接的解决方案,但以防止执行错误回调的方式对其进行修改。我知道我可以在错误回调中检查 status 和 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);
}
解决方案
您可以在代码中的某处尝试此操作
var response=Promise.all([ajaxcall1,ajaxcall2,ajaxcall3,....])
如果其中一个承诺没有得到解决,那么您可以处理错误
response.then((resp)=> //your code to handle resp )
.catch ((error)=>{ //handle error here})
推荐阅读
- google-app-engine - Google Cloud Platform 上的 ndb 查询间歇性地不返回任何内容
- android - gradle 无法在 flutter 中构建
- java - FlowLayout 内的 Java FlowLayout
- c# - MySql DataReader:读取多条记录
- powershell - 如何使用远程机器任务调度程序中的 get-scheduledTasks 过滤某些特定任务
- sql - 为什么这个 CASE 表达式会给出“不一致的数据类型”错误?
- android - 如果图像,我需要选择 PDf 文件
- node.js - 回收 Ably 实时连接
- jquery - 循环控制台内的jquery记录值
- java - 在 Java 中为给定日期添加一天并以特定日期格式返回