2009-05-22 4 views
21

Ich verwende jQuery, um mehrere Daten gleichzeitig zu versuchen und abzurufen. Der Hintergrund der Anforderung besteht darin, dass verschiedene Datenbits verschiedene Zeitspannen benötigen, um verfügbar zu werden. Daher möchte ich jedes Stück so anzeigen, wie es zurückgegeben wird.jQuery: Simultane Ajax-Anfragen machen, ist das möglich?

Das Problem ist, dass die Anfragen zu "Warteschlange" scheinen; Die nächste Anfrage geht erst, wenn die vorherige zurückgegeben wurde. Nach ausgiebigem Lesen scheint die Option "async: false" genau das zu sein, wonach ich suche, aber das scheint keinen Unterschied zu machen.

Aus dem TCP/IP Debugging kann ich sehen, dass der Browser nicht mehr als eine Verbindung initiiert; Es verwendet dieselbe Verbindung, wenn die vorherige Anforderung zurückgegeben wurde.

Ich habe viele Seiten in meiner Zeit gesehen, die Daten über Ajax gleichzeitig laden, also ist es natürlich möglich, aber ich reiße mir die Haare aus, um das zu erreichen.

Hier ist mein Code:

$.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

Warum haben Sie sich die Dokumentation nicht angesehen? Sie sollten die Bedeutung jeder Option, die Sie verwenden, nachgeschlagen haben. 'async: false' ist das Gegenteil von dem, was du beschreibst. –

Antwort

16

Sie asynchrone wollen (das ist die Standardeinstellung). Der Browser beschränkt Sie auf zwei Anfragen zu einem bestimmten Zeitpunkt. Dies ist Teil der HTTP-Spezifikation. (HTTP 1.1 specification, section 8.1.4)

Setzen Sie die Anfragen in die Warteschlange ist die beste Option.

Ich sollte beachten, dass dies in Firefox und wahrscheinlich einige andere Browser überschrieben werden kann. (aber da es nicht Standard ist, hilft es Ihnen nicht viel)

+18

Danke. Du hast mich aufgehört zu suchen, wo es nie ein Problem gab. Es stellt sich heraus, dass dies mit PHP und der Art und Weise zusammenhängt, wie es Anfragen sequentiell verarbeitet, die die gleichen Sitzungsvariablen aufgrund der Sperrung der Sitzung verwenden (warum zur Hölle nicht beim Schreiben gesperrt wird, anstatt während der gesamten Ausführung Wahnsinn). Wie auch immer, eine sehr einfache 'session_write_close()' hat alles behoben. Prost. –

+0

Das ist sowieso gut zu wissen. Kannst du eine Referenz dafür veröffentlichen? – cgp

+3

@Monty Netter Job, der auf das PHP-Problem hinweist und session_write_close() - hat für mich gearbeitet - danke! – JoshuaDavid