1

私は setTimeout を取得して、15秒後に内部にある関数を再実行しようとしています.15秒待っているのではなく、一定のループで実行しています。

これが私の現在のコードです

function checkSession(x) {
http.abort();
http.open("GET", siteURL+"processes/ajax.php?call=check_session&string="+x+"&new="+Math.random(), true);
http.onreadystatechange = function() {
    if(http.readyState == 4) {
        if(http.responseText == true) {
            updateSession(x);
        } else {
            setTimeout(checkSession(x),15000);
        }
    }
}
http.send(null);
}

コード自体に問題はありません。唯一の問題は、「15000」ミリ秒待たずに一定のループを実行していることです。

4

2 に答える 2

9

setTimeout呼び出しを次のように変更します。

setTimeout(function(){checkSession(x)},15000);

これで、checkSessionがすぐに呼び出され、引数としてsetTimeoutに渡されます。関数内でラップすると、呼び出しを延期できます。

于 2013-01-22T16:32:13.283 に答える
1

あなたの説明:

関数は次のようになります。setTimeout( function, delay );

メソッド呼び出しは、無名関数または関数への参照を関数引数として設定していませんでした。

違う:setTimeout(checkSession(x),15000);

理由:checkSession(x)関数呼び出しであり、関数または無名関数への参照ではありません

右:setTimeout(function() {checkSession(x) },15000);

理由: 関数呼び出しが無名関数としてラップされ、関数の引数がsetTimeout( function, delay )メソッドに設定されています。

それがあなたのためにそれを片付けるのに役立つことを願っています!

于 2013-01-22T16:38:10.357 に答える