使用 jQuery 中止 Ajax 请求

2022-08-29 21:55:28

使用jQuery,我是否有可能取消/中止尚未收到响应的Ajax请求?


答案 1

大多数 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)的承诺,因此上述代码仍然有效,尽管返回的对象不再是 an。在此处查看 3.0 博客xhr

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


答案 2

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

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