Ich lerne jQuery und versuche, ein einfaches Codebeispiel zu finden, das eine API nach einer Bedingung abfragt. (dh alle paar Sekunden eine Webseite anfordern und die Ergebnisse verarbeiten)
Ich bin mit der Ausführung von AJAX in jQuery vertraut. Ich kann einfach nicht den "richtigen" Weg finden, um es auf einem "Timer" auszuführen.
setTimeout
und einige haben verwendetsetInterval
. Warum sollte einer dem anderen vorgezogen werden?setTimeout
im Success-Handler, sondern verkette den Ajax-Aufruf immer mit jQuery . So:$.post('ajax/test.html') .done(function(data) { /* process */ }) .always(function() { setTimeout(doPoll, 5000); });
Hier ist ein hilfreicher Artikel über lange Abfragen (lang gehaltene HTTP-Anforderung) mit jQuery. Ein aus diesem Artikel abgeleitetes Code-Snippet:
Dadurch wird die nächste Anforderung erst nach Abschluss der Ajax-Anforderung gestellt.
Eine Variation der oben genannten Option, die beim ersten Aufruf sofort ausgeführt wird, bevor das Warte- / Timeout-Intervall eingehalten wird.
quelle
let is_success = false; (function poll() { let timeout = setTimeout(function() { $.ajax({ url: resp.location, type: "GET", success: function(data) { if(YOUR_CONDITION) { is_success=true; } }, dataType: "json", complete: poll, timeout: 2000 }) }, 5000); if(is_success) { console.log("ending poll"); window.clearTimeout(timeout); } })();
Von ES6,
quelle
quelle
setInterval(poll, 5000);
quelle
jQuery.Deferred () kann die Verwaltung der asynchronen Sequenzierung und Fehlerbehandlung vereinfachen.
Dies ist ein eleganter Ansatz, aber es gibt einige Fallstricke ...
then()
sofort durchfällt , sollte der Rückruf ein anderes dann verwendbares Objekt (wahrscheinlich ein anderesDeferred
) zurückgeben, was sowohl die Schlaf- als auch die Ajax-Zeile tun.quelle
initiate_polling
er vollständig ausgeführt wurde.new Promise( resolve => setTimeout(resolve,1000) ).then( () => alert("done") )
quelle
Ich habe dafür ein kleines JQuery-Plugin erstellt. Sie können es versuchen:
https://www.npmjs.com/package/jquerypoll
quelle
Diese Lösung:
Die Mindestversion von jQuery ist 1.12
quelle