离开页面时出现JQuery Ajax错误

离开页面时出现JQuery Ajax错误,jquery,asynchronous,error-handling,Jquery,Asynchronous,Error Handling,我使用以下代码将数据从服务器异步拉入客户机。错误块中的警报报告服务器上发生的错误。但是,如果用户导航到页面中间调用之外,此块也会被激发并抛出一个空警报容器。是否有任何方法可以更优雅地处理用户离开页面时发出的警告(即在用户离开前不抛出空警报)?可能是通过区分用户导航离开的错误块,而不是服务器上发生的错误 $.ajax({ type: "GET", url: "/handlers/myHandler.ashx", async: true, dataType: "jso

我使用以下代码将数据从服务器异步拉入客户机。错误块中的警报报告服务器上发生的错误。但是,如果用户导航到页面中间调用之外,此块也会被激发并抛出一个空警报容器。是否有任何方法可以更优雅地处理用户离开页面时发出的警告(即在用户离开前不抛出空警报)?可能是通过区分用户导航离开的错误块,而不是服务器上发生的错误

$.ajax({
    type: "GET",
    url: "/handlers/myHandler.ashx",
    async: true,
    dataType: "json",
    data: "var1=test_val&var2=test_val"
    success: function (invoices) {
       //Success block
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) {
        alert(errorThrown);
    }
});
问题解决了

我设置了一个全局变量:

var unloadingState = false;
$(window).bind("beforeunload", function () {
    unloadingState = true;
});
然后使用
beforeunload
事件句柄(谢谢Dave!)修改变量:

var unloadingState = false;
$(window).bind("beforeunload", function () {
    unloadingState = true;
});
最后是ajax方法错误块中的交叉引用:

error: function (XMLHttpRequest, textStatus, errorThrown) {
  if (!unloadingState) {
    alert(errorThrown);
  }
}
是的,警报很难看,不应该使用

试试

if (xhr.status != 0)
  alert(thrownError);

…其中xhr是XMLHttpRequest变量

1),您应该使用HTML元素来报告失败,而不是警报(这是一种非常古老和丑陋的信息提供方式)。2) 您可以尝试在页面中添加
unload
beforeunload
的钩子,该页面设置了一个变量来防止错误,但我不知道事件的顺序是否正确。3) 如果消息是空的,您可以简单地避免显示消息。谢谢,我也同意,在我们应用程序的早期,为了方便起见使用了“警报”。我将调查这些事件。您是否忘记在javascript代码中添加
if(!unloadingState){