小编典典

jQuery AJAX在窗口卸载时触发错误回调-如何过滤出卸载并仅捕获实际错误?

ajax

如果我离开$ .ajax()请求中间的页面,则会触发错误回调。我已经在Safari和FF中使用GET和POST请求进行了测试。

一种可能的解决方案是中止页面卸载时的所有AJAX请求,但是在卸载之前会调用错误处理程序,因此这似乎是不可能的。

我希望能够通过礼貌的警告或模式对话框在客户端优雅地处理诸如500s之类的REAL错误,但是我不希望在用户离开页面时调用此处理。

我该怎么做呢?

-

(也很奇怪:当离开页面时,错误处理程序会说textStatus参数为“错误”,与接收到500 /错误请求时抛出的错误相同。)


阅读 200

收藏
2020-07-26

共1个答案

小编典典

在错误回调或$ .ajax中,您有三个输入参数:

function (XMLHttpRequest, textStatus, errorThrown) {
   this; // options for this ajax request
}

您可以直接检查xhr.status以获得HTTP响应代码,例如:

$.ajax({
  url: "test.html",
  cache: false,
  success: function(html){
    $("#results").append(html);
  },
  error: function (xhr, textStatus) {
    if (xhr.status == 500) {
      alert('Server error: '+ textStatus);
    }
  }
});

编辑: 告诉浏览器断开连接与服务器关闭的情况之间的区别(jasonmerino的评论):

卸载时,xhr.readyState应该为0,对于无响应服务器,xhr.readyState应该为4。

2020-07-26