2009-05-22 18 views
21

Estoy usando jQuery para tratar de recuperar varias piezas de datos al mismo tiempo. El fondo del requisito es que los diferentes bits de datos toman varios períodos de tiempo para estar disponibles, por lo que quiero mostrar cada pieza a medida que se devuelve.jQuery: Hacer solicitudes de ajax simultáneas, ¿es posible?

El problema es que las solicitudes parecen 'cola'; la siguiente solicitud no continúa hasta que la anterior haya regresado. Después de una extensa lectura, parece que la opción 'async: false' podría ser lo que busco, pero parece que no importa.

Desde la depuración TCP/IP puedo ver que el navegador no inicia más de una conexión; usa la misma conexión cuando la solicitud anterior ha regresado.

He visto muchos sitios en mi tiempo que cargan datos sobre ajax simultáneamente, así que obviamente es posible, pero me estoy arrancando el pelo intentando que esto funcione.

Aquí está mi código:

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

¿Por qué no miró la documentación? Deberías haber buscado el significado de cada opción que usas. 'async: false' es el _opposite_ de lo que estás describiendo. –

Respuesta

16

¿Quieres asíncrono (que es el valor por defecto). El navegador lo limita a dos solicitudes en un momento dado. Esto es parte de la especificación HTTP. (HTTP 1.1 specification, section 8.1.4)

Poner las solicitudes en la cola es su mejor opción.

Debo señalar que esto puede ser anulado en Firefox y probablemente en otros navegadores. (pero como no es estándar, no ayuda mucho)

+18

Gracias. Me obligaste a dejar de buscar donde nunca hubo un problema. Resulta que esto está relacionado con PHP y la forma en que procesa secuencialmente las solicitudes que usan las mismas variables de sesión debido al bloqueo de la sesión (por qué diablos no se bloquea en la escritura, en lugar de durante toda la ejecución parece una locura). De todos modos, un 'session_write_close()' muy simple ha arreglado todo. Saludos. –

+0

Eso es bueno saber de todos modos. ¿Puedes publicar una referencia para eso? – cgp

+3

@Monty Buen trabajo señalando el problema de PHP y session_write_close() - funcionó para mí, ¡gracias! – JoshuaDavid

Cuestiones relacionadas