使用jQuery中止Ajax请求

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


大多数jQuery Ajax方法返回一个XMLHttpRequest(或等效的)对象,所以你可以使用abort()

请参阅文档:

  • 中止方法(MSDN)。 取消当前的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开始,返回的对象是一个名为jqXHR的原生XMLHttpRequest对象的包装器。 这个对象似乎公开了所有的本地属性和方法,所以上面的例子仍然有效。 请参阅jqXHR对象(jQuery API文档)。

    更新2:截至jQuery 3,ajax方法返回一个没有额外方法的承诺(如中止),所以这将不再工作。 在这里查看3.0博客。 解决这个问题的一个方法是通过xhr属性来控制xhr对象。 这是一个简单的例子:

    var xhr = new window.XMLHttpRequest();
    var request = $.ajax({
        url : url,
        xhr : function(){
            return xhr;
        }
    });
    xhr.abort();
    

    您无法记起请求,但可以设置一个超时值,之后响应将被忽略。 看到这个页面的jQuery AJAX选项。 我相信如果超时超时,你的错误回调将被调用。 每个AJAX请求都有一个默认的超时时间。

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


    这是一个异步请求,意思是一旦它被发送出去。

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

    否则,只需忽略AJAX响应。

    链接地址: http://www.djcxy.com/p/1965.html

    上一篇: Abort Ajax requests using jQuery

    下一篇: 403 Forbidden vs 401 Unauthorized HTTP responses