2009-05-22 20 views
21

Sto usando jQuery per provare a recuperare più pezzi di dati allo stesso tempo. Lo sfondo del requisito è che diversi bit di dati richiedono tempi variabili per essere disponibili, quindi voglio visualizzare ogni pezzo appena viene restituito.jQuery: effettuare richieste ajax simultanee, è possibile?

Il problema è che le richieste sembrano "in coda"; la richiesta successiva non va fino a quando non è stata restituita la precedente. Dopo una lettura approfondita, sembra che l'opzione 'asincrono: falso' potrebbe essere ciò che sto cercando, ma questo sembra non fare alcuna differenza.

Dal debug TCP/IP vedo che il browser non avvia più di una connessione; usa la stessa connessione quando viene restituita la richiesta precedente.

Ho visto molti siti nel mio tempo che caricano dati su ajax contemporaneamente, quindi ovviamente è possibile, ma mi sto strappando i capelli cercando di farlo funzionare.

Ecco il mio codice:

$.ajax({ 
    type: "GET", 
    async: false, 
    url: "foo1.php" 
    }); 
$.ajax({ 
    type: "GET", 
    async: false, 
    url: "foo2.php" 
    }); 
$.ajax({ 
    type: "GET", 
    async: false, 
    url: "foo3.php" 
    }); 
+4

Perché non hai guardato la documentazione? Dovresti aver cercato il significato di ogni opzione che usi. 'async: false' è il _opposite_ di ciò che stai descrivendo. –

risposta

16

Volete asincrono (che è il default). Il browser ti limita a due richieste in qualsiasi momento. Questo fa parte delle specifiche HTTP. (HTTP 1.1 specification, section 8.1.4)

Inserire le richieste in coda è l'opzione migliore.

Devo notare che questo può essere ignorato in Firefox e probabilmente in altri browser. (ma come non è standard, non ti aiuta molto)

+18

Grazie. Mi hai fatto smettere di guardare dove non c'era mai stato un problema. Si scopre che questo è legato a PHP e al modo in cui elabora sequenzialmente richieste che utilizzano le stesse variabili di sessione a causa del blocco della sessione (perché diavolo non blocca la scrittura, invece durante l'intera esecuzione sembra follia). Ad ogni modo, un semplice 'session_write_close()' ha risolto tutto. Cheers. –

+0

È bello saperlo comunque. Puoi pubblicare un riferimento per questo? – cgp

+3

@Monty Bel lavoro sottolineando il problema PHP e session_write_close() - ha funzionato per me - grazie! – JoshuaDavid

Problemi correlati