有没有办法在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似乎不再支持它。例如,在这种情况下返回特定错误吗?
感谢。
答案 0 :(得分:18)
看起来答案是检查jqXHR.status。 XMLHttpRequest spec概述了设置状态的步骤:
状态属性必须返回运行这些步骤的结果:
如果状态为UNSENT或OPENED,则返回0并终止这些步骤。
如果设置了错误标志,则返回0并终止这些步骤。
- 醇>
返回HTTP状态代码。 1
另请注意: 错误标志表示某种类型的网络错误或请求中止。它最初未设置,在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错误回调中测试它。