Come inviare periodicamente una richiesta AJAX?

2022-06-01 13:30:21

<meta http-equiv="Refresh" Content="5">

Questo script ricarica o aggiorna la pagina ogni 5 secondi. Ma voglio farlo usando jQuery e la chiamata AJAX. È possibile?

- user12345

Source
Risposta


124
  • Come altri hanno sottolineato, setInterval e setTimeout faranno il trucco. Volevo mettere in evidenza una tecnica un po' più avanzata che ho imparato da questo eccellente video di Paul Irish: http://paulirish.com/2010/10-things-i-learned-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 finire in una situazione in cui hai più richieste che consumano risorse condivise e muoiono di fame a vicenda. Puoi evitare questo problema aspettando di programmare la richiesta successiva fino al completamento dell'ultima:

    // 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 utilizzato la callback di successo per la pianificazione. Il lato negativo di questo è che una richiesta non riuscita interromperà gli aggiornamenti. Per evitare ciò potresti invece utilizzare la richiamata 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);
        }
      });
    })();