小编典典

jQuery Ajax错误处理可忽略中止

ajax

我想为ajax调用提供一种全局错误处理方法,这就是我现在所拥有的:

$.ajaxSetup({
  error: function (XMLHttpRequest, textStatus, errorThrown) {
    displayError();
  }
});

我需要忽略的错误abortederrorThrown为null,textStatuserror。我该如何检查aborted


阅读 243

收藏
2020-07-26

共1个答案

小编典典

我今天不得不处理相同的用例。我正在处理的应用程序具有这些长时间运行的ajax调用,这些调用可能会因1)用户导航离开或2)某种临时连接/服务器故障而中断。我希望错误处理程序仅针对连接/服务器故障而不是用户导航运行。

我首先尝试了Alastair
Pitts的答案,但是由于中止的请求和连接失败都将状态代码和readyState设置为0,所以它不起作用。也没有用,因为在两种情况下都没有给出响应,因此没有报头。

对我有用的唯一解决方案是为window.onbeforeunload设置一个侦听器,该侦听器设置一个全局变量以指示该页面已被卸载。然后,错误处理程序可以检查并仅在页面尚未卸载时才调用错误处理程序。

var globalVars = {unloaded:false};
$(window).bind('beforeunload', function(){
    globalVars.unloaded = true;
});
...
$.ajax({
    error: function(jqXHR,status,error){
        if (globalVars.unloaded)
            return;
    }
});
2020-07-26