2009-05-22 7 views
21

J'utilise jQuery pour essayer de récupérer plusieurs éléments de données en même temps. Le contexte de l'exigence est que différents bits de données prennent différentes durées pour devenir disponibles, donc je veux afficher chaque pièce comme elle est retournée.jQuery: Faire des requêtes ajax simultanées, est-ce possible?

Le problème est que les demandes semblent 'mettre en file d'attente'; la prochaine requête ne va pas jusqu'à ce que la précédente soit revenue. Après une longue lecture, il semble que l'option 'async: false' pourrait être ce que je cherche, mais cela ne semble pas faire de différence.

À partir du débogage TCP/IP, je peux voir le navigateur ne pas initier plus d'une connexion; il utilise la même connexion lorsque la demande précédente est retournée.

J'ai vu de nombreux sites dans mon temps qui chargent des données sur ajax simultanément, donc évidemment c'est possible, mais je m'arrache les cheveux en essayant de faire fonctionner ça.

Voici mon 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

Pourquoi n'avez-vous pas consulté la documentation? Vous devriez avoir recherché la signification de chaque option que vous utilisez. 'async: false' est l'opposé de ce que vous décrivez. –

Répondre

16

Vous voulez asynchrone (ce qui est la valeur par défaut). Le navigateur vous limite à deux demandes à la fois. Cela fait partie de la spécification HTTP. (HTTP 1.1 specification, section 8.1.4)

Mettre les demandes dans la file d'attente est votre meilleure option.

Je dois noter que cela peut être surchargé dans Firefox et probablement dans d'autres navigateurs. (mais comme ce n'est pas standard, cela ne vous aide pas beaucoup)

+18

Merci. Tu m'as fait arrêter de regarder là où il n'y a jamais eu de problème. Il s'avère que ceci est lié à PHP et la façon dont il traite séquentiellement les requêtes qui utilisent les mêmes variables de session en raison du verrouillage de la session (pourquoi diable il ne se verrouille pas en écriture, au lieu de toute l'exécution semble folle). Quoi qu'il en soit, un très simple 'session_write_close()' a tout corrigé. Cheers. –

+0

C'est bon à savoir quand même. Pouvez-vous poster une référence pour cela? – cgp

+3

@Monty Beau travail soulignant le problème de PHP et session_write_close() - travaillé pour moi - merci! – JoshuaDavid

Questions connexes