Ver Mensaje Individual
  #4 (permalink)  
Antiguo 14/05/2009, 02:34
matak
 
Fecha de Ingreso: julio-2008
Ubicación: Alcañiz-Teruel-España
Mensajes: 182
Antigüedad: 16 años, 5 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!!!