使用jQuery的$.ajax()函数.如果请求被故意中止,或者如果服务器关闭(没有响应),则会出现相同的结果;
也就是说,在xmlHttpRequest.status = 0和xmlHttpRequest.readyState = 4的情况下触发“成功”处理程序.
(我通过关闭IIS模拟失败的请求,然后针对已经“关闭”的网站执行xmlHttpRequest)
所以我的问题是如何确定中止请求或由于服务器没有响应而导致真正失败的请求(因为服务器可能已关闭)之间的区别,因为两种情况似乎都给我相同的状态/ readyState?
编辑
更准确地说,我想知道在ajax上调用.abort()函数后如何防止调用“success”处理程序.
我已经重新措辞,以反映这一点.
jQuery< 1.5 对于jQuery< 1.5我提出了以下解决方案:
原文链接:https://www.f2er.com/ajax/160227.htmlvar request = $.ajax( /* ... */ ); // ... request.onreadystatechange = function () {}; request.abort();
所以,基本上我所做的是在调用abort()之前删除成功的回调处理程序.
这就像一个魅力.
jQuery> = 1.5:
从jQuery 1.5开始,$.ajax(),$.get(),…函数返回jXHR对象(api documentation)而不是xmlHttpRequest对象.因此,您不能简单地覆盖xmlHttpRequest.onreadystatechange()处理程序.
这就是说,jXHR.abort()负责不调用成功回调处理程序.因此,调用jXHR.abort()就足够了.
您确实不需要更新以前的代码,因为将onreadystatechange设置为jXHR根本就没有效果.
长话短说,从jQuery 1.5开始,这将做:
var jxhr = $.ajax( /* ... */ ); // ... jxhr.abort();