使用jQuery中止Ajax请求

使用jQuery,我怎样才能取消/中止一个尚未收到响应的Ajax请求

解决办法

大多数jQuery的Ajax方法都返回一个XMLHttpRequest(或类似的)对象,所以你可以直接使用abort()

见文档。

  • abort MethodMSDN)。取消当前的HTTP请求。
  • abort()MDN)。如果请求已经被发送,该方法将中止请求。
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开始,返回的对象是一个本地XMLHttpRequest对象的包装器,叫做jqXHR。这个对象似乎暴露了所有的本地属性和方法,所以上面的例子仍然有效。见jqXHR对象(jQuery API文档)。

更新2: 从jQuery 3开始,ajax方法现在返回一个具有额外方法(如中止)的承诺,所以上面的代码仍然有效,虽然返回的对象不再是一个xhr。见3.0博客

更新3:xhr.abort()在jQuery 3.x上仍然有效,不要以为更新2是正确的。更多信息在jQuery Github仓库

评论(15)

你不能召回请求,但你可以设置一个超时值,超时后的响应将被忽略。 关于jquery AJAX选项,请看这个page。 我相信,如果超过了超时时间,你的错误回调将被调用。 每个AJAX请求已经有一个默认的超时。

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

评论(0)

这是一个的异步请求,意味着一旦发送,就会在外面。

如果你的服务器由于AJAX请求而开始了一个非常昂贵的操作,你能做的最好的事情就是打开你的服务器来监听取消请求,并发送一个单独的AJAX请求,通知服务器停止它正在做的事情。

否则,就直接忽略AJAX响应。

评论(8)