J'apprends jQuery et j'essaie de trouver un exemple de code simple qui interrogera une API pour une condition. (c.-à-d. demander une page Web toutes les quelques secondes et traiter les résultats)
Je suis familier avec la façon de faire AJAX dans jQuery, je n'arrive tout simplement pas à trouver le moyen "approprié" de le faire exécuter sur un "timer".
setTimeout
et certains ont utilisésetInterval
. Pourquoi l'un serait-il préféré à l'autre?setTimeout
dans le gestionnaire de succès mais enchaînez toujours l'appel ajax avec jQuery . Comme ça:$.post('ajax/test.html') .done(function(data) { /* process */ }) .always(function() { setTimeout(doPoll, 5000); });
Voici un article utile sur l'interrogation longue (requête HTTP de longue durée) à l'aide de jQuery. Un extrait de code dérivé de cet article:
Cela fera la demande suivante seulement une fois la demande ajax terminée.
Une variante de ce qui précède qui s'exécutera immédiatement la première fois qu'elle sera appelée avant d'honorer l'intervalle d'attente / de temporisation.
la source
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); } })();
Depuis ES6,
la source
la source
setInterval(poll, 5000);
la source
jQuery.Deferred () peut simplifier la gestion du séquençage asynchrone et de la gestion des erreurs.
C'est une approche élégante, mais il y a des pièges ...
then()
tombe immédiatement, le rappel doit renvoyer un autre objet alors utilisable (probablement un autreDeferred
), ce que font les deux lignes sleep et ajax.la source
initiate_polling
avoir été exécuté jusqu'à la fin.new Promise( resolve => setTimeout(resolve,1000) ).then( () => alert("done") )
la source
J'ai créé un petit plugin JQuery pour cela. Vous pouvez l'essayer:
https://www.npmjs.com/package/jquerypoll
la source
Cette solution:
La version minimale de jQuery est 1.12
la source