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

capturar sólo el último estado...

Estas en el tema de capturar sólo el último estado... en el foro de Frameworks JS en Foros del Web. Hola. Estoy interesado en capturar el resultado de una consulta ajax, pero devuelve varias respuestas. Os pongo el código: Código PHP:             divResultado  =  document . ...
  #1 (permalink)  
Antiguo 22/03/2009, 02:58
 
Fecha de Ingreso: febrero-2009
Mensajes: 16
Antigüedad: 15 años, 9 meses
Puntos: 0
capturar sólo el último estado...

Hola. Estoy interesado en capturar el resultado de una consulta ajax, pero devuelve varias respuestas. Os pongo el código:
Código PHP:
            divResultado document.getElementById('resultado_login');
            
document.getElementById('resultado_login').innerHTML "<img src='imatges/loading.gif' width='16'>";
            
nom=document.formulario_alta.login.value;
            
ajax=objetoAjax();
            
ajax.open("POST""comprovalogin.php",true);
            
ajax.onreadystatechange=function() {
                if (
ajax.readyState==&& ajax.status==200divResultado.innerHTML ajax.responseText
                alert
(document.getElementById('resultado_login').innerHTML)
            }
            
ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
             
ajax.send("nombre="+nom
Fijáos en el alert que hay. Muestra tres alerts seguidos, el primero con el contenido original (<img src='imatges/loading.gif' width='16'>), el segundo vacio y el tercero con el resultado real que proviene del ajax.responseText.
Si saco el alert a la última línea entonces ejecuta sólo un alert, pero con el contenido original y no la respuesta ajax.
Mi intención es que sólo muestre el alert cuando se ha ejecutado el ajax.responseText, pero no sé como hacerlo.

Un saludo y gracias.

Última edición por prim; 22/03/2009 a las 03:10
  #2 (permalink)  
Antiguo 22/03/2009, 04:08
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 6 meses
Puntos: 834
Respuesta: capturar sólo el último estado...

Tu problema es de sintaxis javascript. Si en el bloque de ejecución del condicional necesitás ejecutar más de una instrucción, debés envolver el bloque con llaves.
Esto:
Código:
ajax.onreadystatechange=function() {
                if (ajax.readyState==4 && ajax.status==200) 
                    divResultado.innerHTML = ajax.responseText
                alert(document.getElementById('resultado_login').innerHTML)
            }
es equivalente a esto:
Código:
ajax.onreadystatechange=function() {
                if (ajax.readyState==4 && ajax.status==200) 
                    {divResultado.innerHTML = ajax.responseText;}
                alert(document.getElementById('resultado_login').innerHTML)
            }
y lo que necesitás es esto otro
Código:
ajax.onreadystatechange=function() {
                if (ajax.readyState==4 && ajax.status==200) {
                    divResultado.innerHTML = ajax.responseText;
                    alert(document.getElementById('resultado_login').innerHTML);
                }
            }
  #3 (permalink)  
Antiguo 22/03/2009, 16:03
 
Fecha de Ingreso: febrero-2009
Mensajes: 16
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: capturar sólo el último estado...

Muchas gracias, efectivamente era eso. Ahora el problema que se me plantea es de otra índole. Pero antes una duda ¿Cuando se hace la consulta asíncrona al servidor, el código javascript que hay debajo de la consulta ajax sigue ejecutándose? En el siguiente código:

Código PHP:
            divResultado document.getElementById('resultado_login');
            
document.getElementById('resultado_login').innerHTML "<img src='imatges/loading.gif' width='16'>";
            
nom=document.formulario_alta.login.value;
            
ajax=objetoAjax();
            
ajax.open("POST""comprovalogin.php",true);
            
ajax.onreadystatechange=function() {
                if (
ajax.readyState==4){ 
                    
divResultado.innerHTML ajax.responseText
                    
if (document.getElementById('resultado_login').innerHTML.indexOf("existente") != -1) { 
                        
window.document.formulario_alta.login.focus();
                        return 
false;
                    }
                }
            }
            
ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
             
ajax.send("nombre="+nom)

//Todo el código que va a partir de aquí sigue ejecutándose mientras se realiza la consulta ajax....... 
...he observado que mientras está haciendo la consulta el código que hay por debajo sigue ejecutándose.

PD: la sentencia return false es por que la consulta ajax la estoy haciendo dentro de la validación de un campo de formulario...
  #4 (permalink)  
Antiguo 22/03/2009, 16:12
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 6 meses
Puntos: 834
Respuesta: capturar sólo el último estado...

En efecto, el resto del código sigue ejecutándose. La definición de asincronía tiene que ver justamente con eso: el código asíncrono se ejecuta fuera del flujo normal de javascript (mientras la ejecución de una línea en modo síncrono tiene lugar cuando ha finalizado la ejecución de la línea anterior, en el modo asíncrono eso no se cumple.)
  #5 (permalink)  
Antiguo 23/03/2009, 01:41
 
Fecha de Ingreso: febrero-2009
Mensajes: 16
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: capturar sólo el último estado...

Gracias de nuevo Panino, anda que no me ha dado quebraderos de cabeza hasta que me he dado cuenta.
Se trataba de la validación de un campo de formulario para comprobar mediante PHP un login, pero como el resto del código sigue y valida, el formulario lo da por bueno, ya que la petición ajax todavía no ha acabado... Tendré que replantearme partes del código.

Un saludo y gracias.
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 19:02.