当我关闭我的服务器并向它发出ajax请求时,firebug显示请求在发出请求后几秒钟中止,并且我的success处理程序被调用.
为什么调用成功处理程序,它不应该是错误处理程序吗?我怎样才能可靠地发现它实际上并不成功?
码:
$.ajax({
url: url,
type: "POST",
data: data,
dataType: "json",
success:function(data, statusText, xhr){
//gets called on success, or even when server is down.
},
error: function(){
//called if server returns error, but not if it doesn't respond
}
});
Run Code Online (Sandbox Code Playgroud)
更新:此行为仅在localhost上,它在关闭我的开发服务器时发生.我测试了当我尝试访问生产服务器时发生了什么,但让我的个人互联网脱机,它只是挂起,根本没有调用成功或错误.猜猜我应该为这种情况设置超时属性.
我认为这是 jQuery 1.4.2 版本中的一个错误(?)。
我引用jQuery 文档中的一条评论:
在 1.4.2 中,jquery 不会在超时/连接错误时调用 ajax 错误回调,要解决此问题:从 httpSuccess 函数中删除尾随的“ || xhr.status === 0”
如果您确实想修改 jQuery 代码本身,请进行此操作。否则,您可以在成功回调中检查它,就像我在这里所做的那样:
$.ajax({
type: "POST",
url: "http://madeUpServerthatdoesnotExist.com/index.php",
data: "id=1",
success: function(msg){
if(this.xhr().status === 0 ){
errorHandler();
}
else {
alert('Success');
}
},
error: errorHandler
});
function errorHandler(){
alert('Freakin error');
}
Run Code Online (Sandbox Code Playgroud)
好像有点麻烦,如果你知道更好的方法请评论!
编辑:经过研究,我不确定这可能是 jQuery 中的错误,一旦我得到线索就会更新答案
| 归档时间: |
|
| 查看次数: |
1859 次 |
| 最近记录: |