所以基本上我希望能够区分ajax调用何时自然失败(例如404,服务器关闭等)以及浏览器取消它时的区别,例如当用户关闭标签或点击时F5。
我正在侦听失败的ajax尝试并显示错误对话框,描述ajax失败时的错误。但是当有人按下f5(在firefox中特别明显)时,会发生错误回调尚未完成的ajax调用,然后显示错误,当页面加载时,用户卡住查看错误对话框,直到整个页面被浏览器拆除(看起来不太好看,实际上ajax调用失败并不重要,因为正在重新加载整个Web应用程序。)
我已经检查了xmlHttp请求对象,并没有什么能让我把这两种情况区分开来。我也试过添加一个延迟,但这也没有真正起作用。所以我只是想知道它是否可能,如果是这样的话?
答案 0 :(得分:2)
我找到了解决办法。如果设置window.onbeforeunload
处理程序,则会在ajax错误之前调用它。因此,如果设置文档正在卸载的标志,则可以在显示ajax错误之前检查该标志,并在文档处于卸载过程中跳过错误。
适用于Firefox,Chrome和IE中的jQuery 1.11。
您可以在此处查看:http://jsfiddle.net/jfriend00/G3wat/
var unloading = false;
$(window).on("beforeunload", function() {
unloading = true;
});
然后,在你的ajax调用中:
error: function(jqXHR, status, err) {
if (!unloading) {
alert("Error status " + status);
}
而且,正如您所发现的那样,jQuery 2.x似乎为您做到了这一点。