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

Problema de refresco de datos con PHP via AJAX

Estas en el tema de Problema de refresco de datos con PHP via AJAX en el foro de Frameworks JS en Foros del Web. Hola.. tengo un problema de refresco de datos. El montaje que tengo es el siguiente: 1) Boton HTML: llama a funcion javascript insert(). 2) insert(): ...
  #1 (permalink)  
Antiguo 18/06/2009, 08:58
 
Fecha de Ingreso: junio-2009
Mensajes: 8
Antigüedad: 15 años, 5 meses
Puntos: 0
Problema de refresco de datos con PHP via AJAX

Hola.. tengo un problema de refresco de datos. El montaje que tengo es el siguiente:

1) Boton HTML: llama a funcion javascript insert().

2) insert(): via AJAX ejecuta un PHP que inserta un valor en tabla MySQL.

3) insert(): llama a funcion javascript lista().

4) lista(): via AJAX ejecuta un PHP que lista la tabla.


Esto funciona bien el 90% de las veces. Pero alguna vez se hace el insert y sin embargo la nueva fila añadida no aparece en la lista que se ejecuta inmediatamente después.

Mi pregunta es si hay que hacer alguna operacion de refresco de algun cache para que siempre aparezca el nuevo valor. O como podria solucionar esto?
  #2 (permalink)  
Antiguo 18/06/2009, 09:04
Avatar de racanix  
Fecha de Ingreso: diciembre-2008
Ubicación: Morelia Mich.
Mensajes: 192
Antigüedad: 15 años, 11 meses
Puntos: 8
Respuesta: Problema de refresco de datos con PHP via AJAX

Creo que deberias dejar que termina la peticion del insert y posteriomete
ejecutar la lista
  #3 (permalink)  
Antiguo 18/06/2009, 09:05
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Problema de refresco de datos con PHP via AJAX

A mi me paso algo similar. Lo que yo hice fue crear un valor aleatorio luego creo una variable para enviar ese valor aleatorio a traves de ajax y asi engañaba el navegador para que recargara la pagina y no me enviara el resultado que estaba anteriormente. Tratalo y me dejas saber. Como tambien puede ser que no ha terminado de ejecutar el insert y estes llamando el valor. A menos que despues que des un insert haces un echo indicando que ya termino y luego en el ajax llamas la funcion de lista() en el readyState==4
  #4 (permalink)  
Antiguo 18/06/2009, 09:07
 
Fecha de Ingreso: junio-2009
Mensajes: 8
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Problema de refresco de datos con PHP via AJAX

Cita:
Iniciado por racanix Ver Mensaje
Creo que deberias dejar que termina la peticion del insert y posteriomete
ejecutar la lista
Gracias Racanix voy a probarlo... con una funcion general que ejecute insert() y luego lista(). No se si es lo correcto, estoy bastante pez en javascript.
  #5 (permalink)  
Antiguo 18/06/2009, 09:09
 
Fecha de Ingreso: junio-2009
Mensajes: 8
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Problema de refresco de datos con PHP via AJAX

Cita:
Iniciado por abimaelrc Ver Mensaje
A mi me paso algo similar. Lo que yo hice fue crear un valor aleatorio luego creo una variable para enviar ese valor aleatorio a traves de ajax y asi engañaba el navegador para que recargara la pagina y no me enviara el resultado que estaba anteriormente. Tratalo y me dejas saber. Como tambien puede ser que no ha terminado de ejecutar el insert y estes llamando el valor. A menos que despues que des un insert haces un echo indicando que ya termino y luego en el ajax llamas la funcion de lista() en el readyState==4
No se si te refieres a añadilo a la URL del PHP? eso ya lo hago sí.. se me ha olvidado mencionarlo, añado "?sid=<valor aleatorio>".
  #6 (permalink)  
Antiguo 18/06/2009, 09:27
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Problema de refresco de datos con PHP via AJAX

Tema trasladado desde PHP
  #7 (permalink)  
Antiguo 18/06/2009, 10:24
 
Fecha de Ingreso: junio-2009
Mensajes: 8
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Problema de refresco de datos con PHP via AJAX

Cita:
Iniciado por DavidAl Ver Mensaje
Gracias Racanix voy a probarlo... con una funcion general que ejecute insert() y luego lista(). No se si es lo correcto, estoy bastante pez en javascript.
Lo acabo de probar y sigue fallando en algunas llamadas.

Ahora queda asi:

1) Boton HTML: llama a funcion javascript insertLista().

2) insertLista(): llama a insert() que via AJAX ejecuta un PHP que inserta un valor en tabla MySQL.

3) insertLista(): llama a lista() que via AJAX ejecuta un PHP que lista la tabla.

edito: si refresco la pagina se ve la lista completa, pero deberian aparecer sin necesidad de refrescar la pagina.

Última edición por DavidAl; 18/06/2009 a las 10:34
  #8 (permalink)  
Antiguo 18/06/2009, 11:28
 
Fecha de Ingreso: junio-2009
Mensajes: 8
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Problema de refresco de datos con PHP via AJAX

He añadido 100ms de retraso antes de llamar a lista() y el numero de fallos se ha reducido bastante, ahora falla alrededor de dos llamadas de cada 100.

Agradeceré mucho si alguien me puede orientar sobre qué esta pasando aqui, y si hay alguna manera de que funcione al 100% y sin hacer la web más lenta.

Este es el codigo del php que lista:

<?php
require('../includes/conectar.php');

if ($result = $mysqli->query("SELECT * FROM categoria")) {
printf("Categorias: %s <br />", $result->num_rows);
while ($row = $result->fetch_object()) {
printf ("%s <br />", $row->nombre);
}

} else {
echo $mysqli->error;
}

$mysqli->close();
?>
  #9 (permalink)  
Antiguo 19/06/2009, 09:12
 
Fecha de Ingreso: julio-2008
Ubicación: Alcañiz-Teruel-España
Mensajes: 182
Antigüedad: 16 años, 4 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!!!
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 05:28.