如果我离开$ .ajax()请求中间的页面,则会触发错误回调。我已经在Safari和FF中使用GET和POST请求进行了测试。
一种可能的解决方案是中止页面卸载时的所有AJAX请求,但是在卸载之前会调用错误处理程序,因此这似乎是不可能的。
我希望能够通过礼貌的警告或模式对话框在客户端优雅地处理诸如500s之类的REAL错误,但是我不希望在用户离开页面时调用此处理。
我该怎么做呢?
-
(也很奇怪:当离开页面时,错误处理程序会说textStatus参数为“错误”,与接收到500 /错误请求时抛出的错误相同。)
在错误回调或$ .ajax中,您有三个输入参数:
function (XMLHttpRequest, textStatus, errorThrown) { this; // options for this ajax request }
您可以直接检查xhr.status以获得HTTP响应代码,例如:
xhr.status
$.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。