Come licenziare periodicamente la richiesta AJAX?

 

Questo script ricarica o aggiorna la pagina dopo ogni 5 secondi. Ma voglio farlo usando le chiamate jQuery e AJAX. È ansible?

Come altri hanno sottolineato setInterval e setTimeout farà il trucco. Volevo evidenziare una tecnica un po ‘più avanzata che ho imparato da questo eccellente video di Paul Irish: http://paulirish.com/2010/10-things-i-earned-from-the-jquery-source/

Per attività periodiche che potrebbero richiedere più tempo dell’intervallo di ripetizione (come una richiesta HTTP su una connessione lenta) è meglio non utilizzare setInterval() . Se la prima richiesta non è stata completata e ne inizi un’altra, potresti trovarti in una situazione in cui hai più richieste che consumano risorse condivise e ti affamati a vicenda. È ansible evitare questo problema attendendo di pianificare la richiesta successiva fino al completamento dell’ultimo:

 // Use a named immediately-invoked function expression. (function worker() { $.get('ajax/test.html', function(data) { // Now that we've completed the request schedule the next one. $('.result').html(data); setTimeout(worker, 5000); }); })(); 

Per semplicità ho usato il callback di successo per la pianificazione. Il lato negativo di questa è una richiesta non riuscita interromperà gli aggiornamenti. Per evitare ciò, puoi utilizzare la callback completa:

 (function worker() { $.ajax({ url: 'ajax/test.html', success: function(data) { $('.result').html(data); }, complete: function() { // Schedule the next request when the current one's complete setTimeout(worker, 5000); } }); })(); 

Sì, è ansible utilizzare il metodo JavaScript setTimeout() o il metodo setInterval() per richiamare il codice che si desidera eseguire. Ecco come potresti farlo con setTimeout:

 function executeQuery() { $.ajax({ url: 'url/path/here', success: function(data) { // do something with the return value here if you like } }); setTimeout(executeQuery, 5000); // you could choose not to continue on failure... } $(document).ready(function() { // run the first time; all subsequent calls will take care of themselves setTimeout(executeQuery, 5000); }); 

Puoi usare setTimeout o setInterval .

La differenza è: setTimeout triggers la funzione una sola volta e quindi devi impostarla di nuovo. setInterval continua ad triggersre l’espressione ancora e ancora, a meno che tu non gli dica di fermarsi