Foros del Web » Programando para Internet » Javascript » Frameworks JS »

llamadas simultaneas en AJAX

Estas en el tema de llamadas simultaneas en AJAX en el foro de Frameworks JS en Foros del Web. Tengo dos llamadas a un objeto AJAX que se hacen más o menos simultaneamente Código: req = newXMLHttpRequest(); //Creamos un nuevo elemento XMLHttpRequest req.open ('GET', ...
  #1 (permalink)  
Antiguo 26/02/2009, 12:30
 
Fecha de Ingreso: enero-2009
Mensajes: 148
Antigüedad: 15 años, 3 meses
Puntos: 0
llamadas simultaneas en AJAX

Tengo dos llamadas a un objeto AJAX que se hacen más o menos simultaneamente

Código:
    
   req = newXMLHttpRequest(); //Creamos un nuevo elemento XMLHttpRequest
   req.open ('GET', url, true);    // asignamos los metodos open y send
   req.onreadystatechange =callback ;   // funcion de respuesta
   req.send (null);
en la url se llama a un servlet que devolvera una respuesta xml y esa respuesta contiene otra llamada AJAX

Código:
   req2  = newXMLHttpRequest();
   req2.open('GET', url, true); 
   req2.onreadystatechange = response;
   req2.send(null);
en esta llamada te devuelven un objeto de texto el problema se surje en la funcion response cuando hago lo siguiente

Código:
function response(){ 
    
   //Punto conflictivo
   if (req.readyState == 4 ){
	     if (req.status == 200){
    document.getElementById ('content_div').innerHTML = req2.responseText;
              }
     }
   }
no me carga el resultado de req2.responseText en conten_div pero si en el comentario de punto conflictivo añado un alert('espera')

Entonces si se carga...

Es como si necesitase esperar tiempo para que se generase el req2.responseText

¿Alguna solucion? para evitar el alert

Gracias por vuesta ayuda!
  #2 (permalink)  
Antiguo 26/02/2009, 14:24
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: llamadas simultaneas en AJAX

Es altamente probable que req2 y req sean el mismo objeto xmlhttprequest y que al poner el alert() haces que se termine de ejecutar la petición uno y empieze la petición dos.

Revisa tu función newXMLHttpRequest, es probable que no cree una nueva instancia del objeto xmlhttprequest si no que te devuelva uno ya en uso.

Saludos
  #3 (permalink)  
Antiguo 27/02/2009, 02:58
 
Fecha de Ingreso: enero-2009
Mensajes: 148
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: llamadas simultaneas en AJAX

Código:
function newXMLHttpRequest(){
var xmlreq = false;
  if (window.XMLHttpRequest)    {   //Mozilla, Safari etc
        xmlreq = new XMLHttpRequest ();

  } else if (window.ActiveXObject)    {      // IE
        try{
              xmlreq = new ActiveXObject ("Msxml2.XMLHTTP");
        } catch (e)        {    // en caso que sea una version antigua
             try{
        		 xmlreq = new ActiveXObject ("Microsoft.XMLHTTP");
            } catch (e)  {
                alert("Excepcion="+e);
            }
		}
  }  else {
      return false;
  }
     return xmlreq;
}
Esa es mi llamada a newXMLHttpRequest yo creo que si que me esta creando una nueva instancia.

Aunque lo que tu dices creo que tienes razon que termine uno y empiece otro al poner el alert. Aunque por otro lado es algo raro que en IE si que funcione sin hacer uso del alert y donde de el fallo sea en Mozilla.

Buah ¿Crees que debo hacer algun otro cambio?

saludos dablin
  #4 (permalink)  
Antiguo 27/02/2009, 10:24
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: llamadas simultaneas en AJAX

Prueba hacer:
var req = new newXMLHttpRequest();

Saludos
  #5 (permalink)  
Antiguo 02/03/2009, 11:12
 
Fecha de Ingreso: enero-2009
Mensajes: 148
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: llamadas simultaneas en AJAX

Pues tampoco funciona sigue saliendo objeto: undefined.

La verdad que es muy extraño porque en IE si funciona pero Mozilla no..!

No hay ninguna otra solucion para que se ejecuten sincronizados? sin meter ningun alert no encuentro nada por internet y se tiene que poder pero no se me ocurre nada.

Porque tambien he probado hace un setTimeOut pero no sirve de nada jeje por lo menos no me ha salido.

Un saludo

Última edición por dablin; 02/03/2009 a las 11:38
  #6 (permalink)  
Antiguo 02/03/2009, 16:21
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: llamadas simultaneas en AJAX

Que error y en donde te sale?? Te recomiendo que uses Firebug en el Firefox para que te indique en donde esta el error.

Saludos
  #7 (permalink)  
Antiguo 03/03/2009, 03:51
 
Fecha de Ingreso: enero-2009
Mensajes: 148
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: llamadas simultaneas en AJAX

Lo utilizo! si errores no da lo único que no funciona en el Mozzilla, aunque eso es síntoma de que hay un error.

Aunque he realizado un cambio porque antes hacía la llamada req.open y abría el archivo y en la misma función procesaba el contenido, entonces lo que he hecho ahora ha sido procesarla en la otra funcion response que llamo desde req.onreadystatechange y funciona

pero ahora claro tengo que llamar a la función respose que llamaba antes en req.onreadystatechange y pasarle el parametro que he generado en la funcion que he creado nueva jeje un poco lio pero bueno si consiguo hacer que funcione perfect

Muchas gracias
  #8 (permalink)  
Antiguo 03/03/2009, 04:02
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: llamadas simultaneas en AJAX

No sé si es así a propósito o se trata de un error, pero...

Código javascript:
Ver original
  1. if (req.readyState == 4 ){
  2.     if (req.status == 200){
  3.         document.getElementById ('content_div').innerHTML = req2.responseText;
  4.     }
  5. }

...estás comprobando esto:

Si req ha terminado y req ha terminado bien, entonces
-> leo la respuesta de req2

No parece tener mucho sentido, ¿no?

Quiero decir, debería ser...

Código javascript:
Ver original
  1. if (req2.readyState == 4 ){
  2.     if (req2.status == 200){
  3.         document.getElementById ('content_div').innerHTML = req2.responseText;
  4.     }
  5. }

Para leer la respuesta de req2, lo que tiene que haber terminado es req2.
  #9 (permalink)  
Antiguo 03/03/2009, 08:49
 
Fecha de Ingreso: enero-2009
Mensajes: 148
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: llamadas simultaneas en AJAX

si si lo hice con req2 quizas haya sido una confusion al escribirlo.

De todas maneras lo he cambiado aunque para que funcione perfecto estoy investigando para poder pasar parametros a la funcion de respuesta.

req2.onreadystatechage=response(param)
function response(param){
//realizar sentencias.
}

si soy capaz de conseguir pasar de alguna manera los parametros entonces ya consigo que se sincronizen bien :)
  #10 (permalink)  
Antiguo 03/03/2009, 11:36
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: llamadas simultaneas en AJAX

Porque no buscas usar una solución con Prototype, es más simple y viene encapsulado para que no tengas que hacer manualmente todo.

Saludos
  #11 (permalink)  
Antiguo 04/03/2009, 03:27
 
Fecha de Ingreso: enero-2009
Mensajes: 148
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: llamadas simultaneas en AJAX

ok eso hare .
Muchas Gracias
  #12 (permalink)  
Antiguo 11/03/2009, 14:02
 
Fecha de Ingreso: diciembre-2003
Mensajes: 40
Antigüedad: 20 años, 4 meses
Puntos: 0
Respuesta: llamadas simultaneas en AJAX

Pues yo que seguia el tema tambien tendre que buscar algo de eso
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:24.