1
function load_result()
{
    $.getJSON( "http://somesite.com/loadresult.php", function(data) {
        if( data == undefined || data == null )
        {
            console.log( "no data" );
            clearTimeout( lr_timeout );
            lr_timeout = setTimeout( "load_result()", 2000 );
            return;
        }
        insert_result_price( data );
        clearTimeout( lr_timeout );
        lr_timeout = setTimeout( "load_result()", 50 * ( Math.random() * 10 ) );

    } );
}

そしてlr_timeoutグローバルに定義され、load_result関数は最初に関数で開始されdocument.readyます。問題は、関数が常に実行されるとは限らないことです。Firebugでそれを監視し、常に機能するsetIntervalに設定された別の関数があります。

アイデア?

4

2 に答える 2

2

あなたの他のsetTimeout機能(常に機能するもの)も内部にあり$.getJSONますか?もしそうなら、それは同じURLでそれを呼び出しますか(http://somesite.com/loadresult.phpあなたの例では、しかし実際には違うと確信しています)?

http://somesite.com/loadresult.php不安定なリソースである可能性があり、一貫性のない結果は ではなくそのリソースが原因setTimeoutです。もちろん、両方が同じリソースを使用している場合、それは問題にはなりません。

于 2010-01-02T18:28:30.377 に答える
1

私は一般的にsetTimeoutで問題を経験したことはありません.JSのメイン/無限ループに何度も使用しましたが、問題はありませんでした. load_results の 1 つの呼び出しからの clearTimeout が別の呼び出しから setTimeout を踏んでいると想像できます。これは特に、ブラウザーが次の setTimeout に到達するのにかかる時間よりも時間がかかる可能性がある GET 要求に応答しているためです。ここでは実際に複数のスレッドが実行されています。それらを制御することはできず、利用可能な同期メカニズムはありません。

于 2010-01-02T18:21:54.740 に答える