jquery - 为什么$ .ajax在请求中止时调用成功处理程序,因为我的服务器已关闭?

Kyl*_*yle 5 ajax jquery

当我关闭我的服务器并向它发出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上,它在关闭我的开发服务器时发生.我测试了当我尝试访问生产服务器时发生了什么,但让我的个人互联网脱机,它只是挂起,根本没有调用成功或错误.猜猜我应该为这种情况设置超时属性.

Mat*_*ias 3

我认为这是 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 中的错误,一旦我得到线索就会更新答案