这是我的ajax调用的核心。
function ajax(path, requestData, successCallBack, errorCallBack) {
return $.ajax({
error: function(xhr, textStatus, errorThrown)
ç(xhr, textStatus, errorThrown);
},
success: function(json){
successCallBack(json);
}
});
}
当ajax调用正在进行时,用户单击页面上的链接,就会调用我的errorCallBack。用户导航离开会导致ajax调用被终止。当服务器出现错误时,我的errorCallBack回调也会被调用。
有没有办法区分这两者?
谢谢!
发布于 2011-08-08 15:25:02
@colbeerhey的答案是好的,但你可以走得更远。您仍然需要知道服务器是否真的无法访问。我问了here这个问题,但完整的答案是:
var running = true;
$(window).bind('beforeunload', function() { running = false; });
$.ajax({
/* ajax options omitted */
error: function (xmlHttpRequest, textStatus, errorThrown) {
var serverNotReached = xmlHttpRequest.readyState == 0 || xmlHttpRequest.status == 0;
if(serverNotReached && !running)
return; // it's not really an error, user clicked away
else if (serverNotReached)
// The server is down! You didn't get any response at all.
else
// Do normal error handling
});
请记住,onbeforeunload只是一个事实上的标准(IE FF,Webkit都可以处理它),所以如果你关心更多晦涩难懂的浏览器,它就会崩溃。
发布于 2009-05-15 02:51:14
我正在做的事情也有同样的问题...一个‘取消’的$.ajax请求(用户导航离开/点击停止) xhr.status == 0而不是200/404/等等...
发布于 2009-08-13 00:21:16
下面是我用来实现gnarf和nickf答案的技术:
当用户通过刷新、单击链接或更改浏览器中的URL离开页面时,jQuery将引发error事件。您可以通过为ajax调用实现错误处理程序并检查xmlHttpRequest对象来检测这些类型的错误:
$.ajax({
/* ajax options omitted */
error: function (xmlHttpRequest, textStatus, errorThrown) {
if(xmlHttpRequest.readyState == 0 || xmlHttpRequest.status == 0)
return; // it's not really an error
else
// Do normal error handling
});
https://stackoverflow.com/questions/866771
复制相似问题