Frage

Kann mir jemand einen Beispielcode schreiben, wobei Theres eine laufende Timer (Javascript SetTimeout) und dabei den Datenabruf ..

im Grunde, was ich dieser Timer tut, ist neue Nachrichten angezeigt werden ..

myFunction(param){

//data retrieval operation
//using getJSON.. call displaydata() base on param

settimeout("myFunction()", param, 1000);

}

function displaydata(param){

//processing
alert('test')}

Sollte ich getJSON? Ich denke, Theres ein Problem mit dem asynchronen Aufruf ..

War es hilfreich?

Lösung

Zwei Dinge, die ich bemerkt, dass Sie in Ihrem Code beheben müssen.

  • Die setTimeout() Methode hat einige falsche Argumente
  • Ihr asynchroner getJSON Aufruf erzeugt zwischen dem nächsten Timeout und dem Ergebnis der getJSON Methode eine Race-Bedingung. Tun Sie dies statt:

.

function yourFunction(params) {  
    jQuery.getJSON("url", {data}, function(data, textStatus){
        // handle your JSON results

        // Call the timeout at the end of the AJAX response
        // This prevents your race condition
        setTimeout(function(){
            yourFunction(params);
        }, 1000);
    }
} 

setTimeout(function(){
    yourFunction(params);
}, 1000);

Andere Tipps

Der erste Parameter eine Funktion Literal oder eine Funktionsreferenz und der zweite Parameter soll die Millisekunden betragen sollte.

setTimeout( function() {
    getData('param')
}, 1000);

function getData() {
     $.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?",
        function(data){
          $.each(data.items, function(i,item){
            $("<img/>").attr("src", item.media.m).appendTo("body");
            if ( i == 3 ) return false;
          });
        });
}

Ich verwende nicht das eigentliche Argument in meinem Beispiel, aber Sie können es leicht, dies zu tun aktualisieren. Ich war auch nicht sicher, ob Sie Polling waren (dies nicht tun Umfrage / rekursive calling).

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