2012-06-27 11 views
5
$(document).ready(function() { 
    (function poll() { 
     setTimeout(function() { 
      $.ajax({ 
       url: "/project1/api/getAllUsers", 
       type: "GET", 
       success: function(data) { 
        console.log("polling"); 
       }, 
       dataType: "json", 
       complete: poll, 
       timeout: 5000 
      }), 5000 
     }); 
    })(); 
});​ 

Questo continua a essere eseguito alla stessa velocità con cui il server può rispondere, ma speravo che potesse eseguire il polling solo ogni 5 secondi. Eventuali suggerimenti?jQuery sondaggio ajax ricorsivo utilizzando setTimeout per controllare l'intervallo di polling

MODIFICA: Vorrei aggiungere, 5 secondi dopo che la richiesta è stata completata sarebbe preferibile.

+0

Sembra eseguire il successivo sondaggio AJAX 5 secondi dopo il completamento di quello precedente. Che cosa vuoi cambiare? Meglio posso capire la tua domanda, era quello che volevi. –

+0

@Richard Neil Ilagan: voglio eseguirlo all'incirca ogni 5 secondi (5 secondi dopo che la richiesta di ajax è stata completata va bene e mi è stato detto, migliore pratica) ma quello che osservo è che la richiesta viene eseguita molto più rapidamente, come se ignorasse il ritardo di 5 secondi. – chrisjleu

+0

Scusa, sono uscito per cena. Ho preso una seconda occhiata e ho trovato dove ti sembra di sbagliare. È spuntata una risposta qui sotto. –

risposta

6

Sembra che sei riuscito a ottenere il vostro setTimeout ritardo argomentazione scritta nel posto sbagliato.

$(document).ready(function() { 
    (function poll() { 
    setTimeout(function() { 
     $.ajax({ 
      url: "/project1/api/getAllUsers", 
      type: "GET", 
      success: function(data) { 
       console.log("polling"); 
      }, 
      dataType: "json", 
      complete: poll, 
      timeout: 5000 
     }) //, 5000 <-- oops. 
    }, 5000); // <-- should be here instead 
    })(); 
});​ 

Se si seguono le parentesi graffe, vedrai che si sta chiamando setTimeout come:

setTimeout(function() { 
    $.ajax(), 5000 
}) 

e dovrebbe essere

setTimeout(function() { 
    $.ajax(); 
}, 5000) 

Questo dovrebbe chiamare i AJAX sondaggio 5 secondi dopo che il precedente è stato completato.

+0

Sì, è stato - errore stupido. Grazie. – chrisjleu

+1

Nah, tutto bene, direi. Succede al meglio di noi. Buona fortuna. :) –

1

Se deve eseguire il polling ogni 5 secondi e non necessariamente 5 secondi dopo aver completato l'ultima richiesta, è possibile utilizzare setInterval. Non so se sia accettabile, ma renderebbe la ricorsione inutile.

function poll() { 

      $.ajax({ 
       url: "/project1/api/getAllUsers", 
       type: "GET", 
       success: function(data) { 
        console.log("polling"); 
       }, 
       dataType: "json" 
     }); 
    } 

setInterval(poll, 5000); 
0

In caso si volesse utilizzare la sintassi di promessa di jQuery, piuttosto che la sintassi di callback, ecco un altro modo ordinato.

function poll() { 
    $.get('http://your-api-endpoint.com') 
    .done(function() { 
     // 200 - OK response 
    }) 
    .fail(function() { 
     // Error Response 
    }) 
    .always(function() { 
     setTimeout(function() { 
      poll(); 
     }, 5000); 
    }); 
} 

poll();