如果这是我应该能够查找的内容,我深表歉意。我想要的所有术语都重载了..
这是我的问题:当我打开一个页面时,它会触发一系列的 ajax 调用。如果我然后按 Shift+Refresh,所有这些 ajax 调用都将被视为错误,并在整个页面本身重新加载之前显示错误消息对话框。
所以错误是由客户端触发的 - 我是否可以找出是否是这种情况,以便我可以忽略它?例如在 xmlhttprequest 中,或在 ajax 函数中(我正在使用 jquery 顺便说一句)
最佳答案
有几种建议的方法来检测此问题:
一些人建议使用
beforeunload
处理程序设置一个 bool 标志,以便错误处理程序可以知道页面正在卸载(请参阅下面的相关/重复帖子列表)。这很棒,除了mobile Safari on iOS doesn't support thebeforeunload
event .Sachindra suggested这种方法不是立即触发错误函数,而是在
setTimeout(..., 1000)
中延迟了一秒钟。 。这样,当错误处理程序被调用时,页面很可能实际上已经消失了。就是“好机会”。我敢打赌,如果我有一个巨大的页面,例如许多<input>
s,卸载可能需要超过 1 秒的时间,然后错误处理程序可能无论如何都会触发。
因此,我建议组合 reliably detecting beforeunload
support如果 beforeunload
不支持(咳嗽 iPad/iPhone 咳嗽)恢复到 Sachindra 的延迟技巧。
通过beforeunload
查看完整的解决方案检测和所有这一切jsfiddle .
看起来情况是a little better for jQuery 2.x than for 1.x ,但 2.x 似乎也有点不稳定,所以我仍然认为这个建议是谨慎的。
P.S: 还有一些建议涉及测试 XHR
中的某些字段。/jqXHR
目的。 ( Here 和 here )。我还没有遇到过可以在长时间运行的 AJAX 调用期间区分用户导航和重新启动 Web 服务器的组合,因此我没有发现这种方法对我有用。
这实际上也是对这些相关/重复的 Stack Overflow 问题的答案:
- jQuery AJAX fires error callback on window unload?
- $.ajax calls success handler when request fails because of browser reloading
- How best to handle errors during jquery ajax calls caused by user clicking on links
- Detecting that a jQuery.ajax call failed because the page is reloading?
以及 Stack Overflow 之外的这些帖子:
关于jquery - 当用户点击刷新时处理ajax错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/699941/