微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Ajax:如何防止jQuery在执行xmlHttpRequest.abort()之后调用success事件;

使用jQuery的$.ajax()函数.如果请求被故意中止,或者如果服务器关闭(没有响应),则会出现相同的结果;

也就是说,在xmlHttpRequest.status = 0和xmlHttpRequest.readyState = 4的情况下触发“成功”处理程序.

(我通过关闭IIS模拟失败的请求,然后针对已经“关闭”的网站执行xmlHttpRequest)

所以我的问题是如何确定中止请求或由于服务器没有响应而导致真正失败的请求(因为服务器可能已关闭)之间的区别,因为两种情况似乎都给我相同的状态/ readyState?

编辑
更准确地说,我想知道在ajax上调用.abort()函数后如何防止调用“success”处理程序.

我已经重新措辞,以反映这一点.

jQuery< 1.5 对于jQuery< 1.5我提出了以下解决方案:
var 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();

原文地址:https://www.jb51.cc/ajax/160227.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐