gcr*_*ain 40 ajax error-handling jquery
如果这是我应该能够查找的内容,我道歉.我想要的所有条款都超载了..
这是我的问题:当我打开一个页面时,它会触发一系列的ajax调用.如果我然后按Shift + Refresh,所有这些ajax调用都被视为错误,并在整个页面本身重新加载之前显示其错误消息对话框.
所以错误是由客户端触发的 - 无论如何我可以找出是否是这种情况所以我可以忽略它?例如在xmlhttprequest中,或在ajax函数中(我使用的是jquery btw)
Pet*_*rch 37
有几种建议的方法可以检测到这种情况:
有几个人建议使用beforeunload处理程序来设置一个布尔标志,以便错误处理程序可以知道页面正在被卸载(参见下面的相关/重复帖子列表).这很棒,除了iOS上的移动Safari不支持该beforeunload事件.
Sachindra提出了一种方法,它不是立即触发错误函数,而是延迟了一秒钟setTimeout(..., 1000).这样,在调用错误处理程序时,页面很可能实际上已消失."好机会"就是这样.我打赌如果我有一个巨大的页面,例如很多<input>s,卸载可能需要1秒多的时间,然后错误处理程序可能会解雇.
因此,我建议可靠地检测beforeunload支持的组合,如果beforeunload不支持(咳嗽 iPad/iPhone 咳嗽)恢复到Sachindra的延迟技巧.
通过beforeunload检测查看完整的解决方案,并在此jsfiddle中查看所有内容.
对于jQuery 2.x而言,情况看起来比1.x好一些,但2.x也似乎有点不稳定,所以我仍然认为这个建议是谨慎的.
PS:还有一些建议涉及测试XHR/ jqXHRobject 中的某些字段.(这里和这里).在长时间运行的AJAX调用期间,我还没有能够区分用户导航和重新启动Web服务器的组合,因此我没有发现这种方法对我有用.
这也是这些相关/重复的Stack Overflow问题的答案:
以及Stack Overflow之外的这些帖子:
cur*_*ter 19
[这是上一个答案的编辑,其中包含我已经解决的突出问题]
当用户通过刷新,单击链接或更改浏览器中的URL导航离开页面时,jQuery会抛出错误事件.您可以通过为ajax调用实现错误处理程序并检查xmlHttpRequest对象来检测这些类型的错误:
$.ajax({
/* ajax options omitted */
error: function (xmlHttpRequest, textStatus, errorThrown) {
if(xmlHttpRequest.readyState == 0 || xmlHttpRequest.status == 0)
return; // it's not really an error
else
// Do normal error handling
});
Run Code Online (Sandbox Code Playgroud)
var isPageBeingRefreshed = false;
window.onbeforeunload = function() {
isPageBeingRefreshed = true;
};
$.ajax({
error: function (xhr, type, errorThrown) {
if (!xhr.getAllResponseHeaders()) {
xhr.abort();
if (isPageBeingRefreshed) {
return; // not an error
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13341 次 |
| 最近记录: |