0

小さなプロジェクトでは、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();
});

よろしくお願いします

4

2 に答える 2

0

グローバル変数のステータスを「実行」または「停止」に設定するボタンを追加するだけで、すべての呼び出しの前にその変数のステータスを確認できますか? 次に、必要に応じてリダイレクトします。

于 2012-12-24T14:53:50.637 に答える
0

FAngel が言ったように、最初の長いプロセスは他のリクエストをブロックしていました!

したがって、このプロセスでは、session_write_close(); を追加しました。最後のセッションアクセスの後、すべてが正常に機能するようになりました!

ありがとう !

于 2012-12-24T21:13:49.623 に答える