對於一個小項目,我有一個頁面,我意識到一個長時間的請求(2分鐘),1ms超時(只需啓動進程異步,我不知道不需要任何備份),並且每5秒發送一次AJAX呼叫。如何停止jQuery的任何進程來更改document.location
我想做一個按鈕來取消所有的AJAX調用,並改變document.location。
我用xhrPool腳本試圖取消所有的AJAX調用,然後我調用document.location行。但是,當我點擊按鈕時,腳本似乎被一些AJAX調用阻塞,並且用戶(我)需要等待20-30s,太懶。
有我的腳本:
$.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();
});
由於通過提前
如果你要離開頁面,爲什麼還要取消? –
AJAX調用本身不會阻止瀏覽器從頁面重新加載,並且在離開頁面之前不需要阻止它們。你在長時間運行的請求中使用會話嗎?可能你應該等待,因爲會話被該請求阻止,並且服務器只是將你的下一個請求放入隊列中,等待正在發佈的會話 –
對不起,我不明白,因爲在你的cancel.click中,你改變了文檔位置, ),這又稱爲每1秒。 – HMarioD