jQuery的AJAX触发错误回调的窗口卸载 - 我该如何过滤掉卸载,只抓到真正的错误? [英] jQuery AJAX fires error callback on window unload - how do I filter out unload and only catch real errors?

查看:102
本文介绍了jQuery的AJAX触发错误回调的窗口卸载 - 我该如何过滤掉卸载,只抓到真正的错误?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我在一个$就中期(导航离开页面)要求它触发错误回调。我在Safari和FF与GET和POST请求测试。

If I navigate away from a page in the middle of an $.ajax() request it fires the error callback. I've tested in Safari and FF with both GET and POST requests.

一个潜在的解决办法是中止页卸载所有的AJAX请求,但错误处理程序卸载之前调用,因此这似乎并不可能。

One potential solution would be to abort all AJAX requests on page unload, but the error handler is called before unload, so this doesn't seem possible.

我希望能够处理真正的错误,如500S优雅与礼貌的警告或模式对话框的客户端,但我不希望在用户从页面导航离开这个处理被称为

I want to be able to handle REAL errors such as 500s gracefully on the client side with a polite alert or a modal dialog, but I don't want this handling to be called when a user navigates away from the page.

我如何做到这一点?

-

(也怪:当从一个页面导航走,错误处理程序说,textStatus参数为错误,接收500 /错误的请求时,它抛出相同。)

(Also strange: When navigating away from a page, the error handler says that the textStatus parameter is "error", the same it throws when receiving a 500/bad request.)

推荐答案

在错误回调或 $就你有三个输入参数:

In the error callback or $.ajax you have three input arguments:

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

您可以检查直接在 xhr.status 来获得HTTP响应code,例如:

You can check directly the xhr.status to get the HTTP response code, for example:

$.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的评论):

To tell the difference between a connection broken by the browser and the case where the server is down (jasonmerino's comment):

在卸载的xhr.readyState应该是0,其中对于无响应   服务器xhr.readyState应该是4

On unload the xhr.readyState should be 0, where for a non responsive server the xhr.readyState should be 4.

这篇关于jQuery的AJAX触发错误回调的窗口卸载 - 我该如何过滤掉卸载,只抓到真正的错误?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆