对于一个小项目,我有一个页面,我实现了一个长时间请求(2 分钟),超时时间为 1 毫秒(只需要启动进程异步,我不需要任何备份),并且每 5 秒调用一次 AJAX。
我想做一个按钮来取消所有 AJAX 调用,并更改 document.location。
我使用 xhrPool 脚本尝试取消所有 AJAX 调用,然后调用 document.location 行。但是,当我单击按钮时,脚本似乎被一些待处理的 AJAX 调用阻塞,用户(我)需要等待大约 20-30 秒,太长了。
这是我的脚本:
$.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);
}
}
});
function toTime(c) {
var str = '';
if (c > 59) {
str = Math.floor(c/60) + 'm ';
c %= 60;
}
if (c > 0)
str = str + c + 's';
return str;
}
function updateProgress() {
$('.progress .bar').animate({
width: count*4
}, {duration:1000, easing: 'linear'});
$('.progress .bar').html(toTime(count));
}
function timer() {
updateProgress();
if (count > 0) {
if ((count % 5) == 0) {
$.ajax({
url: '/?act=verifyStatus',
timeout: 5000
}).done(function(data){
if (data == 'OK')
document.location = '/?act=found';
});
}
} else {
document.location = '/?act=nodelivers';
}
count--;
setTimeout('timer()', 1000);
}
$(function(){
$('.cancel').click(function(){
$.xhrPool.abortAll();
document.location = '/?act=form';
});
$.ajax({
url: '/?act=doContact',
timeout: 1
});
timer();
});
提前致谢