2

ajax 呼び出しが 0 を返すまで 2 秒間一時停止して自分自身を呼び出す関数があります。今では長時間継続できるため、一時停止するか、ボタン クリックなどの外部イベントで停止したいと考えています。

function create_abcd()
{
    var dataString = 'action=create_abcd&type=' + $('#abcd_type').val() + '&count=100';
    $.ajax({
        type: "POST",
        url: "backend.php",
        data: dataString,
        success: function(msg){
            if(msg != "0")
            {
                $("#abcd_output").append('<p>' + msg + '</p>')
                    setTimeout(create_abcd, 2000);
            }
            else
                return false;
        }
    });
}

どんな助けでも大歓迎です!

4

3 に答える 3

7

何かのようなもの:

var needStop = false;

function create_abcd()
{
    var dataString = 'action=create_abcd&type=' + $('#abcd_type').val() + '&count=100';
    $.ajax({
        type: "POST",
        url: "backend.php",
        data: dataString,
        success: function(msg){
            if(needStop) {
                needStop = false;
                return;
            }
            if(msg != "0")
            {
                $("#abcd_output").append('<p>' + msg + '</p>')
                    setTimeout(create_abcd, 2000);
            }
            else
                return false;
        }
    });
}

$('#button').click(function() {
    needStop = true;
});

=)

于 2012-05-25T20:23:10.490 に答える
2

あなたは間違った方法で問題を解決しようとしていると思います。サーバーで実行時間の長いプロセスが終了したときに通知を生成したいのは明らかなので、2秒ごとにポーリングします。これにより、多くの不要なリクエストが発生します。

代わりにプッシュ機構を使用してください。

あなたはPHPなので、COMETの使用を検討してください。

http://www.zeitoun.net/articles/comet_and_php/start

于 2012-05-25T20:24:14.017 に答える
0

グローバル変数 (またはページ上の非表示の入力) を作成します。

ページに「停止」ボタンを作成します。

「停止」ボタンをクリックすると、その入力または変数を特別な値に設定するだけです。

create_abcd続行する前に、その変数または入力を確認してください。特別な値が設定されている場合は、タイムアウトを再度設定する前に終了してください。

于 2012-05-25T20:21:38.260 に答える