Hola, a mi me ha ocurrido lo mismo, me he visto en la necesidad de hacer varias peticiones "a la vez".
Digo "a la vez" entre comillas porque en realidad lo que necesito es lanzar varias peticiones pero en un orden determinado. Esto lo intenté de la siguiente forma:
Código:
function manejadorDeOnClick(){
for (i = 0;i < 5;i++){
ajax = getHTTPObject();
accion();
};
};
La función
getHTTPObject() es la típica para conseguir un objeto
XMLHttpRequest.
Así, cuando se ejecuta el
manejadorDeOnClick() de, por ejemplo, un botón, se debería ejecutar 5 veces
accion(), cuyo código es el siguiente:
Código:
function accion(){
// aquí recojo de un formulario una serie de valores en la variable params...
ajax.open("POST",url,true);
ajax.onreadystatechange = new Function("manejadorDeRespuesta();");
ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
ajax.send(params);
};
Pero de este modo solo se finaliza correctamente la última llamada a
accion(), las primeras parecen "perderse" en algún sitio.
Necesito pausar la ejecución del bucle
for de la función
manejadorDeOnClick() para no llamar a
accion() antes de que la anterior llamada termine.
Lo he intentado poniendo la siguiente línea en el bucle
for después de la llamada a
accion() y casi lo consigo:
Código:
while (ajax.readyState == 4){};
El resultado que obtengo al final es el que espero pero entre
accion() y
accion() se queda como bloqueado y a los 10 segundos me sale un mensaje del navegador diciendo que una secuencia de órdenes puede estar ocupada o no se que, y me da la opción de continuar o parar. Si elijo continuar, al final obtengo lo que quiero pero claro... de esta manera no es lo deseado.
¿Habéis descubierto alguno como poder hacer esto? Soy todo oidos!!