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. Hola a todos! Tengo una llamada Ajax que me de vuelve un xml que se procesa y luego se carga en una pagina web. Todo ...
  #1 (permalink)  
Antiguo 13/05/2009, 02:26
 
Fecha de Ingreso: enero-2009
Mensajes: 148
Antigüedad: 15 años, 9 meses
Puntos: 0
llamadas simultaneas en AJAX

Hola a todos!

Tengo una llamada Ajax que me de vuelve un xml que se procesa y luego se carga en una pagina web. Todo es ok.

El problema viene cuando quiero dividir la página en 2 y cargar el mismo contenido sobre dos div diferentes que solamente se carga en un de ellos.

Con ayuda del firebug he observado que la respuesta se genera pero o por lo menos eso parece pero no se envia a la funcion donde se procesa la información.

¿Puede ser con motivo que como utilizo la misma variable para crear el objeto XMLHttpRequest en las dos llamadas se solape la información?

Si se os ocurre alguna idea. (El código es bastante lioso por eso no he puesto nada). De todas maneras como digo si solamente hago una llamada va ok.

Un saludo a todos
  #2 (permalink)  
Antiguo 13/05/2009, 03:16
 
Fecha de Ingreso: julio-2008
Ubicación: Alcañiz-Teruel-España
Mensajes: 182
Antigüedad: 16 años, 4 meses
Puntos: 5
Respuesta: llamadas simultaneas en AJAX

Si te he entendido bien a mi me paso eso. Lo solucione llamando de forma diferente a los objetos ajax, el problema es que tube que crear 2 funciones diferentes que hacen lo mismo con la salvedad que los nombres de los objetos difieren. Se que no es muy eficiente, pero en su día no encontré otra solución.

pe:

Código javascript:
Ver original
  1. //Funcion que crea el objeto ajax
  2. function objetoAjax(){
  3.     var xmlhttp=false;
  4.     try {
  5.         xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  6.     } catch (e) {
  7.         try {
  8.            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  9.         } catch (E) {
  10.             xmlhttp = false;
  11.     }
  12.     }
  13.  
  14.     if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
  15.         xmlhttp = new XMLHttpRequest();
  16.     }
  17.     return xmlhttp;
  18. }
  19.  
  20. function f1(url,divcontenido){
  21.     ajax1=objetoAjax();
  22.     ajax1.open("POST", url, true);
  23.     ajax1.onreadystatechange=function() {
  24.         if (ajax1.readyState==4) {
  25.             divcontenido.innerHTML = ajax1.responseText
  26.         }
  27.     }
  28.     ajax1.send(null)
  29. }
  30.  
  31.  
  32. function f2(url,divcontenido){
  33.     ajax2=objetoAjax();
  34.     ajax2.open("POST", url, true);
  35.     ajax2.onreadystatechange=function() {
  36.         if (ajax2.readyState==4) {
  37.             divcontenido.innerHTML = ajax2.responseText
  38.         }
  39.     }
  40.     ajax2.send(null)
  41. }

Código html:
Ver original
  1. <input type='button' value='actualiza' onclick="javascript:f1('prueba1.php',document.getElementById('div1'));javascript:f2('prueba2.php',document.getElementById('div2'));">
  2. <div style="width:50%;float:left" id="div1"></div>
  3. <div style="width:50%;float:left" id="div2"></div>

prueba1.php

Código html:
Ver original
  1. <font style="font-size:30pt;color:red;">contenido prueba1.php</font>

prueba2.php

Código html:
Ver original
  1. <font style="font-size:30pt;color:green;">contenido prueba2.php</font>

Ya dirás, Saludos
__________________
Si quieres puedes y si puedes debes. Imposible is nothing!!!

Última edición por matak; 13/05/2009 a las 03:54
  #3 (permalink)  
Antiguo 13/05/2009, 08:36
 
Fecha de Ingreso: enero-2009
Mensajes: 148
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: llamadas simultaneas en AJAX

Gracias por está solución mientras me funcione,lo único malo es que en el caso que quiera 3 llamadas necesitaría 3 llamadas diferentes no? y bueno asi sucesivamente con 4, 5...

¿No sabes nada de algo más genérico para resolver el problema?

De todas maneras mientras tanto intentaré hacerlo asi. Que supongo que me tiene que funcionar..

Gracias
  #4 (permalink)  
Antiguo 14/05/2009, 02:34
 
Fecha de Ingreso: julio-2008
Ubicación: Alcañiz-Teruel-España
Mensajes: 182
Antigüedad: 16 años, 4 meses
Puntos: 5
Respuesta: llamadas simultaneas en AJAX

Buenas dablin,

He investigado un poco y he dado con una forma algo mas genérica para solucionar el problema. Se trata de hacer la vble ajax globlal e inicializada a null. Cuando el objeto ajax recibe el contenido de la página procesada lo insertamos y volvemos a colocar la vble globlal a null. De esta forma podemos preguntar lo primero de todo por el valor de la vble, si esta no es igual a null es que hay un proceso ajax corriendo entonces por medio de setTimeout (ejecución retardada) volvemos a llamar a la función. La cosa quedaría asi:

Código javascript:
Ver original
  1. var ajax=null; //vble global
  2.  
  3. //Funcion que crea el objeto ajax
  4. function objetoAjax(){
  5.     var xmlhttp=false;
  6.     try {
  7.         xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  8.     } catch (e) {
  9.         try {
  10.            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  11.         } catch (E) {
  12.             xmlhttp = false;
  13.     }
  14.     }
  15.  
  16.     if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
  17.         xmlhttp = new XMLHttpRequest();
  18.     }
  19.     return xmlhttp;
  20. }
  21.  
  22. function f1(url,divcontenido){
  23.     if (ajax==null) {
  24.       objDestino=document.getElementById(divcontenido)
  25.       ajax=objetoAjax();
  26.       ajax.open("POST", url, true);
  27.       ajax.onreadystatechange=function() {
  28.           if (ajax.readyState==4) {
  29.               objDestino.innerHTML = ajax.responseText
  30.               ajax = null
  31.           }
  32.       }
  33.       ajax.send(null)
  34.     }else{
  35.       setTimeout("f1('"+url+"','"+divcontenido+"')",10)      
  36.     }
  37. }

Código html:
Ver original
  1.  
  2. //Código javascript
  3.  
  4. <input type='button' value='actualiza' onclick="javascript:f1('prueba1.php','div1');javascript:f1('prueba2.php','div2');javascript:f1('prueba3.php','div3');javascript:f1('prueba4.php','div4');">
  5. <div style="clear:both"></div>
  6. <div style="width:50%;float:left" id="div1"></div>
  7. <div style="width:50%;float:left" id="div2"></div>
  8. <div style="width:50%;float:left" id="div3"></div>
  9. <div style="width:50%;float:left" id="div4"></div>

Si te fijas hacemos 4 llamadas a f1., pero la llamada ha cambiado, ya no pasamos el objeto div a la función f1 sino su identificador (del div). Lo hago asi para poder hacer la llamada a setTimeout pasándoselo por parámetro a f1, función que se ejecutará con retardo.

prueba1.php
Código html:
Ver original
  1. <font style="font-size:30pt;color:red;">contenido prueba1.php</font>
prueba2.php
Código html:
Ver original
  1. <font style="font-size:30pt;color:green;">contenido prueba2.php</font>
prueba3.php
Código html:
Ver original
  1. <font style="font-size:30pt;color:blue;">contenido prueba3.php</font>
prueba4.php
Código html:
Ver original
  1. <font style="font-size:30pt;color:yellow;">contenido prueba4.php</font>

Espero sea lo que buscabas y haberte ayudado, Saludos
__________________
Si quieres puedes y si puedes debes. Imposible is nothing!!!
  #5 (permalink)  
Antiguo 14/05/2009, 08:44
 
Fecha de Ingreso: enero-2009
Mensajes: 148
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: llamadas simultaneas en AJAX

Creo que eso es lo que necesitaba, por lo menos tiene muy buena pinta..! Lo voy a probar a ver si lo resuelvo.

Muchas Gracias.

Intentaré contestarte lo antes posible comentando que tal fue. (Estoy fuera del trabajo pero nada más que vuelva lo pruebo :)

Un saludo
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 05:25.