协慌网

登录 贡献 社区

使用 jQuery 中止 Ajax 请求

使用 jQuery,如何取消 / 中止我尚未收到响应的 Ajax 请求

答案

大多数 jQuery Ajax 方法返回 XMLHttpRequest(或等效的)对象,因此您可以使用abort()

查看文档:

var xhr = $.ajax({
    type: "POST",
    url: "some.php",
    data: "name=John&location=Boston",
    success: function(msg){
       alert( "Data Saved: " + msg );
    }
});

//kill the request
xhr.abort()

更新:从 jQuery 1.5 开始,返回的对象是名为 jqXHR 的本机 XMLHttpRequest 对象的包装器。此对象似乎显示所有本机属性和方法,因此上述示例仍然有效。请参阅jqXHR 对象 (jQuery API 文档)。

更新 2:从 jQuery 3 开始,ajax 方法现在返回带有额外方法(如 abort)的 promise,所以上面的代码仍然有效,尽管返回的对象不再是xhr 。请参阅此处3.0 博客

更新 3xhr.abort()仍适用于 jQuery 3.x. 不要认为更新 2是正确的。 有关 jQuery Github 存储库的更多信息

您无法调用该请求,但可以设置超时值,之后将忽略响应。有关 jquery AJAX 选项,请参阅此页面 。我相信如果超过超时时间,将调用您的错误回调。每个 AJAX 请求都有一个默认超时。

您也可以在请求对象上使用abort()方法,但是,虽然它会导致客户端停止侦听事件,但它可能不会阻止服务器处理它。

这是一个异步请求,意味着一旦它被发送到那里。

如果您的服务器由于 AJAX 请求而开始非常昂贵的操作,您可以做的最好是打开您的服务器以侦听取消请求,并发送单独的 AJAX 请求,通知服务器停止它正在做的任何事情。

否则,只需忽略 AJAX 响应。