离开页面时出现的JQuery Ajax错误

5

我正在使用以下代码从服务器异步地向客户端拉取数据。错误块中的警报会报告在服务器上发生的错误。但是如果用户在调用中离开页面,则此块也会被触发并引发空警报容器。是否有任何方法可以更优雅地处理用户离开页面(即在其离开之前不抛出空警报)?也许通过区分错误块中用户已经离开而不是发生了服务器错误来解决问题?

$.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. 如果消息为空,您可以简单地避免显示消息。
- Dave
谢谢,我同意,“alert”在我们应用程序的早期阶段是为了方便而使用的。我会研究那些事件。 - QFDev
可能是重复的问题:当离开页面时如何处理jQuery ajax post错误 - romor
2个回答

4

Try...

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

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


1
问题已经解决...
我设置了一个全局变量:
var unloadingState = false;

然后添加一个 beforeunload 事件处理程序(感谢 Dave!)来修改变量:

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

最后在ajax方法的错误块中添加一个交叉引用:
error: function (XMLHttpRequest, textStatus, errorThrown) {
  if (!unloadingState) {
    alert(errorThrown);
  }
}

而且,警告框很丑,不应该使用!


4
你的 JavaScript 代码里面是否忘记添加了 if (!unloadingState) { 这行代码? - wal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接