如何取消/中止jQuery AJAX请求?

我有一个AJAX请求,每5秒发一次。 但是,如果前一个请求没有完成,问题出现在AJAX请求之前我必须中止该请求并发出新的请求。

我的代码是这样的,如何解决这个问题?

$(document).ready(
    var fn = function(){
        $.ajax({
            url: 'ajax/progress.ftl',
            success: function(data) {
                //do something
            }
        });
    };

    var interval = setInterval(fn, 500);
);

jquery ajax方法返回一个XMLHttpRequest对象。 您可以使用此对象来取消请求。

XMLHttpRequest有一个放弃方法,它取消请求,但是如果请求已经发送到服务器,那么即使我们中止了请求,服务器也会处理请求,但客户端不会等待/处理响应。

xhr对象还包含一个包含请求状态(UNSENT-0,OPENED-1,HEADERS_RECEIVED-2,LOADING-3和DONE-4)的readyState。 我们可以用它来检查前一个请求是否完成。

$(document).ready(
    var xhr;

    var fn = function(){
        if(xhr && xhr.readyState != 4){
            xhr.abort();
        }
        xhr = $.ajax({
            url: 'ajax/progress.ftl',
            success: function(data) {
                //do something
            }
        });
    };

    var interval = setInterval(fn, 500);
);

我知道这可能有点晚,但我遇到类似的问题,调用中止方法并没有真正中止请求。 而浏览器仍然在等待它从未使用过的响应。 这段代码解决了这个问题。

 try {
        xhr.onreadystatechange = null;
        xhr.abort();
} catch (e) {}

为什么要中止请求?

如果每个请求花费超过五秒钟,会发生什么?

如果传递请求的参数没有改变,您不应该中止请求。 例如: - 请求用于检索通知数据。 在这种情况下,好的方法是在完成先前的Ajax请求之后才设置新的请求。

$(document).ready(

    var fn = function(){

        $.ajax({
            url: 'ajax/progress.ftl',
            success: function(data) {
                //do something
            },

            complete: function(){setTimeout(fn, 500);}
        });
    };

     var interval = setTimeout(fn, 500);

);
链接地址: http://www.djcxy.com/p/6667.html

上一篇: How to cancel/abort jQuery AJAX request?

下一篇: full path in breadcrumbs wordpress