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

时间:2012-02-10 14:06:43

标签: 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, textStatus, errorThrown) {
           // Don't raise this alert if user has navigated away from the page
           alert('error');
    }
});

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

感谢。

3 个答案:

答案 0 :(得分:18)

看起来答案是检查jqXHR.status。 XMLHttpRequest spec概述了设置状态的步骤:

  

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

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

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

  4.   
  5. 返回HTTP状态代码。 1

  6.   

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

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

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

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

答案 1 :(得分:13)

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

// Ignore incomplete requests, likely due to navigating away from the page
if (jqXHR.readyState < 4) {
    return true;
} 
错误处理程序中的

(4为DONE)。

答案 2 :(得分:3)

我不得不多次处理这个问题。

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

请参阅http://api.jquery.com/unload/