Frage

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 ) );

    } );
}

und lr_timeout ist global definiert und die load_result Funktion wird zunächst in der document.ready Funktion gestartet. Das Problem ist, dass die Funktion nicht immer ausgeführt werden. Ich werde es in Firebug sehen und ich habe eine andere Funktion, die auf einem setInterval eingestellt ist, dass immer funktioniert.

Ideen?

War es hilfreich?

Lösung

Ist Ihre andere setTimeout Funktion (die das funktioniert immer) auch in einem $.getJSON? Wenn ja, tut es es auf der gleichen URL aufrufen (http://somesite.com/loadresult.php in Ihrem Beispiel, aber ich bin sicher, es ist anders im wirklichen Leben)?

Es ist möglich, dass http://somesite.com/loadresult.php eine flockige Ressource ist, und Ihre inkonsistenten Ergebnisse sind aufgrund dieser Ressource, nicht setTimeout. Natürlich, wenn sie beide die gleiche Ressource verwenden, dann nicht, dass das Problem sein könnte.

Andere Tipps

Ich habe nie ein Problem mit setTimeout erfuhr im Allgemeinen, und ich habe es für eine Haupt / Endlosschleife in JS schon ein paar Mal verwendet, ohne dass es jemals ein Problem hat. Ich könnte mir vorstellen, dass clear von einem Aufruf von load_results auf SetTimeout von einem anderen verstärkt, zumal es in Antwort auf eine GET-Anforderung ist, die länger dauern können, als es den Browser auf die nächste SetTimeout zu umgehen nimmt. Es gibt tatsächlich mehrere Threads auf geht hier vor, Sie haben gerade keine Kontrolle über sie und es gibt keine Synchronisationsmechanismus zur Verfügung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top