我想根据变量立即拒绝所有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
类似于“当请求首次启动时”将其称为“
答案 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()
这似乎会在需要时立即中止所有请求。