1

いくつかのファイルがあると仮定します: server.php、client.php および 1 つのテーブル: user[id, name, status]

server.php は次のような処理を行います: ユーザーステータスの更新など...

client.php には、ステータスがアクティブになっているかどうかを確認するための server.php への ajax 呼び出しがあります (10 秒ごと):

$(document).ready(function(){
    setInterval(function(){
        check_user_status(user_id)
    },10000);
});

check_user_status = function (user_id) {
    $.ajax({
        type: "post",
        data: "user_id="+user_id,
        url : "server.php",
        success: function(data){
             // do something with the response
             // I want to exit the checking operation if user is already activated
        },
        error: function(e){
            alert("Error occurred");
        }
    });
}

どうすればそれができますか?

御時間ありがとうございます!

4

2 に答える 2

6

タイマーに割り当てられた ID を覚えておいてください。

var timer = setInterval( ... );

条件が満たされたときにキャンセルします。

clearInterval(timer);

timer変数は「スコープ」内にある必要があります。最も簡単な解決策は、すべてコードをdocument.readyハンドラー内に配置することです。

FWIW、実際には のsetTimeout代わりに使用しsetIntervalて、毎回タイマーを再起動することをお勧めします。

setIntervalサーバーが応答しなくなると問題が発生します。これは、10 秒ごとにコールバックを忠実にキューイングし続けるためです。サーバーが応答すると、突然、これらすべてのコールバックをすぐに実行しようとします。

代わりに使用setTimeoutすると、前のチェックが実際に完了するまで、新しいチェックがキューに入れられません。

于 2012-07-17T10:31:45.127 に答える
1

試す:

var intrvl = setInterval(function(){
        check_user_status(user_id)
    },10000);


....
success: function(data){
 clearInterval(intrvl);

}
于 2012-07-17T10:33:44.623 に答える