Ver Mensaje Individual
  #14 (permalink)  
Antiguo 26/04/2006, 06:09
masterjail
 
Fecha de Ingreso: octubre-2004
Ubicación: Cork (Irlanda)
Mensajes: 161
Antigüedad: 19 años, 6 meses
Puntos: 1
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!!