小さなプロジェクトでは、1ミリ秒のタイムアウト(プロセスを非同期で起動する必要があり、バックアップは必要ありません)で1つの長時間のリクエスト(2分)を実現し、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();
});
よろしくお願いします