对于一个小项目,我有一个页面,我实现一个长时间请求(2分钟),1ms超时(只需要启动进程异步,我不需要任何备份),并且每个都调用一些AJAX 5秒。
我想按一个按钮来取消所有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();
});
先谢谢
答案 0 :(得分:0)
只需添加一个按钮,将全局变量状态设置为“运行”或“停止”,并在每次调用之前检查该变量的状态?然后根据需要重定向。
答案 1 :(得分:0)
就像FAngel所说,第一个漫长的过程阻止了其他请求!
所以,在这个过程中,我刚刚添加了session_write_close();在上次访问会话之后,现在一切正常!
谢谢!