【问题标题】:JQuery Ajax error when leaving page离开页面时出现JQuery Ajax错误
【发布时间】:2013-02-25 22:10:06
【问题描述】:

我正在使用以下代码将数据从服务器异步拉入客户端。错误块中的警报报告服务器上发生的错误。但是,如果用户在调用过程中离开页面页面,这个块也会被触发并抛出一个空的警报容器。有什么方法可以更优雅地处理用户离开页面(即在他们离开之前不抛出空警报)?也许通过区分用户已经导航离开的错误块,而不是服务器上发生的错误?

$.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);
    }
});

【问题讨论】:

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

标签: jquery asynchronous error-handling


【解决方案1】:

问题解决了..

我设置了一个全局变量:

var unloadingState = false;

然后是 beforeunload 事件句柄(感谢 Dave!),来修改变量:

$(window).bind("beforeunload", function () {
    unloadingState = true;
});

最后是ajax方法的错误块中的交叉引用:

error: function (XMLHttpRequest, textStatus, errorThrown) {
  if (!unloadingState) {
    alert(errorThrown);
  }
}

是的,警报很丑陋,不应该使用!

【讨论】:

  • 您是否忘记在您的 javascript 代码中添加if (!unloadingState) {
【解决方案2】:

试试……

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

...其中 xhr 是您的 XMLHttpRequest 变量

【讨论】:

    猜你喜欢
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多