如何通过浏览器有意取消AJAX?

时间:2014-04-11 05:01:44

标签: javascript jquery ajax browser

所以基本上我希望能够区分ajax调用何时自然失败(例如404,服务器关闭等)以及浏览器取消它时的区别,例如当用户关闭标签或点击时F5。

我正在侦听失败的ajax尝试并显示错误对话框,描述ajax失败时的错误。但是当有人按下f5(在firefox中特别明显)时,会发生错误回调尚未完成的ajax调用,然后显示错误,当页面加载时,用户卡住查看错误对话框,直到整个页面被浏览器拆除(看起来不太好看,实际上ajax调用失败并不重要,因为正在重新加载整个Web应用程序。)

我已经检查了xmlHttp请求对象,并没有什么能让我把这两种情况区分开来。我也试过添加一个延迟,但这也没有真正起作用。所以我只是想知道它是否可能,如果是这样的话?

1 个答案:

答案 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似乎为您做到了这一点。