2011-08-16 16 views
7

Sto interagendo con un'API che consente un'azione per 5 secondi. Tuttavia, voglio assicurarmi che tutte le richieste finiscano con l'host. Come posso accodare e limitare le richieste effettuate contro un'API utilizzando .ajax()?jQuery throttling e accodamento delle richieste AJAX

Molto obbligato!

risposta

9

si potrebbe fare qualcosa in questo senso

var requests = []; 

setInterval(function() { 
    if(requests.length > 0) { 
     var request = requests.pop(); 
     if(typeof request === "function") { 
      request(); 
     } 
    } 
}, 5000); 

// then anywhere you need to make an ajax request 
requests.push(function() { 
    // ajax request here 
    $.ajax({ 
     url: "/foo", // some variable from outer scope 
     success: function(a,b,c) { 
      // handle it 
     } 
    }); 
}); 
-2

Se si vuole garantire nulla allora si sarebbe meglio avere un mezzo altro di Internet - è intrinsecamente inaffidabile. Ad ogni modo, per fare in modo che provi il, assicurarsi di utilizzare il metodo Javascript setTimeout per avviare la chiamata in un secondo momento.

Oltre a ciò, se non si desidera utilizzare altre risorse di terze parti, è possibile esaminare il metodo delay esposto da jQuery.

+3

Questa è un'opinione non comprovata. La trasmissione affidabile di dati su Internet è banale. – Konrads

3

jQuery ha un'interfaccia .delay() e vi consiglio di verifica e leggere.

+0

delay() e queue() si applicano solo alle animazioni, che utilizzano la coda effetti. Non saranno utili per ritardare AJAX. – thenickdude

+1

@Lamah Non vero, '.delay()' e '.queue()' può essere utilizzato per le proprie code (o la coda 'fx' predefinita, che viene utilizzata per le animazioni). Qualsiasi funzione generica può essere aggiunta a una coda chiamata arbitrariamente. – Chad

+0

Hai perfettamente ragione, chiaramente ho bisogno di imparare a leggere la documentazione più da vicino! – thenickdude

Problemi correlati