如何在离开页面时处理jQuery ajax发布错误

Ste*_*lsh 33 ajax jquery

有没有办法在JQuery中处理来自ajax请求的错误,这样当用户离开页面时,会忽略生成的错误?

$(document).ready(function() {
 $.ajax( {
    url:'/server/url/',
    type: 'POST',
    data: {some..data},
    success:function(response) { do stuff with response },
    error: function(xhr, textStatus, errorThrown) {
           // Don't raise this alert if user has navigated away from the page
           alert('error');
    }
});
Run Code Online (Sandbox Code Playgroud)

我很好奇是否有人知道一个干净的方法来处理这个问题?我知道你可以在一个$(window).bind("beforeunload", function(){})方法中创建一些逻辑但我更喜欢是否有办法处理这种情况而不这样做,因为Chrome似乎不再支持它.例如,在这种情况下返回特定错误吗?

谢谢.

Ste*_*lsh 18

看起来这个问题的答案是检查jqXHR.status.在XMLHttpRequest的规范概述了这些步骤设置状态:

状态属性必须返回运行这些步骤的结果:

  1. 如果状态为UNSENT或OPENED,则返回0并终止这些步骤.

  2. 如果设置了错误标志,则返回0并终止这些步骤.

  3. 返回HTTP状态代码.1

另请注意:错误标志表示某种类型的网络错误或请求中止.它最初未设置,在DONE状态下使用.

因此,根据我的理解,此代码检查应该解决问题:

    if (xhr.status == 0)
        alert('error');
Run Code Online (Sandbox Code Playgroud)

1 https://web.archive.org/web/20120204040047/http://www.w3.org/TR/XMLHttpRequest/#the-status-attribute

  • 有没有办法区分有人导航离开页面的情况和其他网络问题(超时,主机未找到等)? (5认同)

小智 13

检查状态对我不起作用,但是

// Ignore incomplete requests, likely due to navigating away from the page
if (jqXHR.readyState < 4) {
    return true;
} 
Run Code Online (Sandbox Code Playgroud)

在错误处理程序中(4正在完成).