Ver Mensaje Individual
  #9 (permalink)  
Antiguo 19/06/2009, 09:12
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: Problema de refresco de datos con PHP via AJAX

Si he entendido bien el problema que tu tienes es que un Proceso AJAX te machaca el otro ya que AJAX es asincrono. De entrada sólo puede correr un proceso aunque hay formas para hacer que puedas crear varios procesos y que estos se vayan ordenando en el tiempo.
Mírate esta estructura y adáptala a tu código.

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+"')",1)
  36.      
  37.     }
  38. }
  39.  
  40. function f2(url,divcontenido){
  41.     if (ajax==null) {
  42.       objDestino=document.getElementById(divcontenido)
  43.       ajax=objetoAjax();
  44.       ajax.open("POST", url, true);
  45.       ajax.onreadystatechange=function() {
  46.           if (ajax.readyState==4) {
  47.               objDestino.innerHTML = ajax.responseText
  48.               ajax = null
  49.           }
  50.       }
  51.       ajax.send(null)
  52.     }else{
  53.       setTimeout("f2('"+url+"','"+divcontenido+"')",1)
  54.      
  55.     }
  56. }

Fijate bien que creamos una vble global ajax que nos permite rastrearla y ver en que estado se encuentra.

1º Rastreamos estado de la vble ajax
a) ajax==null :
a1:Creamos la instacia del objeto XMLHttpRequest y realizamos la petición ajax
a2:ajax.readyState==4, Recibimos la respuesta en ajax.responseText y realizamos acciones oportunas,...
a3:ajax=null, ponemos semaforo en verde
b) ajax != null:
b1:Volvemos a llamar a la función con un retardo a elección del desarrollador. Cuanto menor sea el retardo mayor será el grado de espera activa del proceso. Aqui estaría rebueno un sleep() pero aun no he encontrado la forma y creo que en javascript no existe tal función. Corríjanme si me equivoco.

Espero haberme explicado y que te sirva mi aporte

Ya contarás como te va...

Saludos,
__________________
Si quieres puedes y si puedes debes. Imposible is nothing!!!