2011-09-16 5 views
9

Ho questo simil-code:Come ritardare tra ogni ciclo della funzione jQuery.each?

$('li').each(function(){ 
    var data = $(this).text(); 
    requestFunction(data, function(status){ 
     if (status == 'OK') do stuff... 
    }); 
}); 

Così, ho bisogno di fare un po 'di ritardo tra l'uso della funzione "requestFunction()". Come potrei farlo? Spero sia comprensibile, grazie.

+2

Stai facendo chiamate ajax? –

+0

Sì, era Google Maps Geocoder –

risposta

26

setTimeout in un momento incremento:

$('li').each(function(indexInArray){ 
    var data = $(this).text(); 
    setTimeout(function() { 
     requestFunction(data, function(status){ 
      if (status == 'OK') do stuff... 
     }); 
    }, indexInArray * 500); 
}); 

se loop su questi elementi, si vuole aumentare il timeout oppure tutte le richieste avrebbe sparato allo stesso tempo, se non in ritardo, ma solo dopo il nostro timeout di 500 ms.

  • Ora di inizio: 0 ms
  • Prima Richiesta: 0 ms (500 * 0)
  • seconda richiesta: 500 ms (500 * 1)
  • terza richiesta: 1000 ms (500 * 2)
+0

Quale array sarebbe? Intendo "indexInArray". –

+0

Oh, amico, ti dimentichi di scrivere "each (function (* indexInArray *) {" questa parte di codice. Conosco gli indici nella funzione jQ.each. Quindi, ora ti sottometto bene. Grazie. . fuori –

+0

@Ax, sì, mi aveva scritto male che Fatemi sapere come va – Joe

2

Se si effettuano chiamate di chiamata all'interno del proprio each ciclo quindi si consiglia di eseguire le richieste Ajax in modo sincrono.

Per fare ciò è possibile impostare la proprietà async della richiesta ajax su false.

In alternativa si consiglia di guardare in implimenting un callback per requestFunction. Questo ti permetterà di eseguire il codice dopo che il tuo metodo è tornato e annullerà la necessità di qualsiasi timeout, ecc.

Un callback è fondamentalmente un metodo che viene eseguito alla fine del tuo codice. In pratica dici la tua funzione, ecco un'altra funzione che voglio che tu chiami quando hai finito di fare il tuo lavoro.

+0

Non capisco, sory. –

+0

Non riesco a leggere una fonte di "richiestaFunzione". Posso solo fare un po 'di ritardo tra le chiamate. –

+0

Perché è necessario un ritardo tra le chiamate? Si prega di spiegare –