質問

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に設定されています別の機能を持っています。

アイデア?

役に立ちましたか?

解決

また、setTimeout内部のあなたの他の$.getJSON機能(常時動作するもの)ですか?もしそうなら、それは(あなたの例ではhttp://somesite.com/loadresult.phpが、私はそれが実際の生活の中でさまざまだと確信しています)同じURLでそれを呼び出すのですか?

これはhttp://somesite.com/loadresult.phpがフレーク状の資源であり、あなたの一貫性のない結果がそのリソースではなく、setTimeoutによるものである可能性があります。彼らは両方とも、同じリソースを使用している場合はもちろん、その後、それが問題になることができませんでした。

他のヒント

これが今まで問題がなくても、かなりの数回私は一般のsetTimeoutの問題を経験したことがない、と私はJSでメイン/無限ループのためにそれを使用しました。私はload_resultsの1回の呼び出しからてclearTimeoutは、それが次のsetTimeoutに周りを取得し、ブラウザを取るよりも時間がかかることがGET要求に応答します、特に以来、他からのsetTimeoutを踏んでいることを想像するだろう。実際にここで起こって複数のスレッドがありますが、あなたはちょうどそれらを制御することはできませんし、使用可能な同期化機構がありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top