JQuery GetJSON innerhalb SetTimeOut Timer
-
13-09-2019 - |
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 ..
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 dergetJSON
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).