Ajax Heartbeat using setInterval, Prévention de plusieurs appels en même temps

Je souhaite effectuer un appel AJAX en utilisant jQuery comme “pulsation” en arrière-plan afin que mon application Web puisse rechercher de nouvelles données. Par exemple toutes les 10 secondes.

J’ai vu dans d’autres publications qu’il est possible d’utiliser setInterval() pour appeler une méthode qui appelle tous les X millisecondes.

Cependant, que se passe-t-il si mon appel AJAX prend plus de 10 secondes? Je veux toujours que la dernière demande soit complétée et je ne veux pas qu’un autre appel soit lancé alors qu’il y en a déjà un en cours. Cela pourrait avoir pour conséquence que la même information soit placée deux fois sur la page!

Quel est le moyen d’implémenter cela pour que ma méthode attende que l’appel AJAX d’origine soit terminé, plutôt que simplement “toutes les 10 secondes”, alors que l’appel d’origine n’est peut-être pas encore terminé?

essayez de définir un autre délai d’attente depuis votre fonction de succès ajax:

 function poll() { setTimeout( function() { $.ajax(.......).success( function(data) { poll(); //call your function again after successfully calling the first time. }); }, 10000); } 

Au lieu d’utiliser setInterval , appelez setTimeout() dans le rappel d’achèvement AJAX pour démarrer chaque appel 10 secondes après la fin du précédent.

au lieu d’utiliser setInterval, calculez le temps de requête (généralement en utilisant un horodatage Unix en secondes), combien de temps, pendant 10 secondes, côté serveur, utilisez setTimeout le temps restant, afin ou l’activité du site)

 function heartbeat(){ $.ajax({ 'url': '/where/', 'success': function(data){ setTimeout(heartbeat, parseInt(data) * 1000); } }); } heartbeat(); // initialize it 

côté serveur (comme en PHP), vous feriez