离开页面导航时如何处理jQuery ajax post错误

离开页面导航时如何处理jQuery ajax post错误,jquery,ajax,Jquery,Ajax,有没有一种方法可以在JQuery中处理来自ajax请求的错误,这样当用户离开页面时,所产生的错误就会被忽略 $(document).ready(function() { $.ajax( { url:'/server/url/', type: 'POST', data: {some..data}, success:function(response) { do stuff with response }, error: function(xhr, text

有没有一种方法可以在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');
    }
});
我很好奇是否有人知道一个干净的方法来处理这件事?我知道您可以在
$(window.bind(“beforeunload”,function(){})
方法中创建一些逻辑,但我更希望有一种方法可以处理这种情况,而不必这样做,因为Chrome似乎不再支持它。例如,在这种情况下是否会返回特定的错误


谢谢。

这个问题我也处理过好几次了

我建议绑定到
$(window.unload
事件,在某个地方设置一些变量,例如在命名空间中(
App.unload=true
),然后在ajax错误回调中测试它


请参见

对此的答案似乎是检查jqXHR.status。概述了设置状态的以下步骤:

status属性必须返回运行以下步骤的结果:

  • 如果状态为未发送或已打开,则返回0并终止这些步骤

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

  • 返回HTTP状态代码

  • 另请注意: 错误标志表示某种类型的网络错误或请求中止。它最初未设置,并在完成状态期间使用

    因此,据我所知,此代码检查应该解决以下问题:

        if (xhr.status == 0)
            alert('error');
    


    1

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

    // Ignore incomplete requests, likely due to navigating away from the page
    if (jqXHR.readyState < 4) {
        return true;
    } 
    
    //忽略不完整的请求,这可能是由于导航离开了页面
    if(jqXHR.readyState<4){
    返回true;
    } 
    

    在错误处理程序中,执行了(4个已完成)。

    由于调用是针对服务器的,因此我认为它没有足够的知识根据用户是否离开该页面返回不同的响应。有没有什么地方可以提供这种行为的例子?另一个页面的脚本在您导航离开该页面后会继续运行,这似乎很奇怪。我认为该脚本实际上停止运行,并且会抛出一个错误,因为它提前终止。一旦您导航离开,您的AJAX调用将进入位存储桶。客户端上不再有侦听器接收来自该请求的任何消息。正在调用错误回调。但是,xhr.status为0,这可能用于过滤此条件。可能的重复项似乎不适用于所有浏览器:请参阅以了解其他方法。也许将卸载事件和标志与状态检查结合起来就足够了。这正是我想要的答案。绑定新事件是一项过度工程。有没有办法区分当有人离开页面时的情况和其他网络问题(超时、找不到主机等)?文章说,当响应返回时,页面已经卸载,回调函数将不再存在,那么错误回调如何可靠地工作呢?这不应该是
    xhr.status==0
    吗?错误:函数(xhr,textStatus,errorThrown){if(xhr.readyState==4)alert(error);}如果服务器进程存在,jqXHR.readyState值将为0。事实上,这应该转到错误处理,因为这不是用户导航离开的情况。我不能同意。我正在使用当前的FireFox和jQuery v2.0.0。当我在ajax请求期间跟踪链接时,ajax请求以jqXHR.readyState=4和jqXHR.status=404结束。