拒绝所有AJAX请求

时间:2016-06-11 19:43:43

标签: javascript jquery ajax

我想根据变量立即拒绝所有AJAX请求。我理解如何挂钩XMLHttpRequest但不知道如何拒绝它。

(function(open) {
            XMLHttpRequest.prototype.open = function(method, url, async, user, pass) {
                this.addEventListener("readystatechange", function() {
                    if(this.readyState === 1){
                        // stop all ajax attempts if we're disconnected
                        if(!self.isConnected){
                            console.log('rejecting')
                            // reject here
                            this.abort(); // ???
                        }
                    }
                }, false);
                open.call(this, method, url, async, user, pass);
            };
        })(XMLHttpRequest.prototype.open);

此外,我想知道是否在内部调用此内容 this.readyState === 0类似于“当请求首次启动时”将其称为“

2 个答案:

答案 0 :(得分:0)

你可以使用abort函数来中止ajax请求,首先在一些变量中保存你的请求并在其上调用abort

$(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);
);

还有另一种创建AJAX池设置的方法,我不推荐,fiddle这里

$.xhrPool = [];
$.xhrPool.abortAll = function() {
    $(this).each(function(idx, jqXHR) {
        jqXHR.abort();
    });
    $.xhrPool = [];
};

$.ajaxSetup({
    beforeSend: function(jqXHR) {
        $.xhrPool.push(jqXHR);
    },
    complete: function(jqXHR) {
        var index = $.xhrPool.indexOf(jqXHR);
        if (index > -1) {
            $.xhrPool.splice(index, 1);
        }
    }
});

答案 1 :(得分:0)

我只是添加了

this.abort()

这似乎会在需要时立即中止所有请求。