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

Tomar valor actualizado por Ajax

Estas en el tema de Tomar valor actualizado por Ajax en el foro de Frameworks JS en Foros del Web. Hola a todos, Llevo un par de días dándole vueltas a un problemilla. Os simplifico mi problema : Se trata de la típica función de ...
  #1 (permalink)  
Antiguo 22/08/2007, 04:12
 
Fecha de Ingreso: agosto-2007
Ubicación: Torremolinos Málaga
Mensajes: 9
Antigüedad: 16 años, 8 meses
Puntos: 0
Tomar valor actualizado por Ajax

Hola a todos, Llevo un par de días dándole vueltas a un problemilla. Os simplifico mi problema :

Se trata de la típica función de comprobación antes de enviar un formulario (que todos los campos estén vacíos, que el campo email sea un correo válido, etc. ).

Lo problemático es que tengo que comprobar que dos selects (con id's) no estén ya insertados en la BD, y lo debo hacer ANTES de enviar el formulario.

La idea que he implementado es la siguiente (os la pongo en pseudocódigo):

function enviar(){

//compruebo inputs

//llamo a la funcion comprueba_ajax

comprueba_ajax(select_1.value,select_2.value);

//la función anterior mediante ajax, actualiza un hidden del formulario (lo hace bien)

//y aquí el problema:

alert (mi_hidden.value); //No está actualizado!!!!, y e alert sale en blanco

alert (mi_hidden.value); //Y la segunda vez YA ha Tomado el valor actualizado


}

¿Por qué!!!!!!!!?
Me estoy rompiendo la cabeza, y he llegado a dos conclusiones:
La primera: Que el primer Alert se ejecute antes de que termine el Ajax,
La segunda: que el alert tome el value antiguo del hidden, y hasta el segundo alert, el javascript no actualize su valor...

He probado varias cosas y ninguna me ha funcionado. ¿Alguna sugerencia????

Saludos y Muchas gracias!
  #2 (permalink)  
Antiguo 22/08/2007, 04:44
 
Fecha de Ingreso: agosto-2007
Ubicación: Torremolinos Málaga
Mensajes: 9
Antigüedad: 16 años, 8 meses
Puntos: 0
Re: Tomar valor actualizado por Ajax

Otra vez yo, perdonad, pero os comento algunos datos útiles más, para que no perdáis el tiempo (como yo):

La primera hipótesis la tengo casi descartada, porque antes de efectuar el alert, he puesto bucles largos, retardos con set_time_out, y nunca me toma el valor del hidden a la primera.

Por otro lado, si el primer alert lo hago con una constante, también me funciona!! por lo que tengo claro, que el problema es que tengo que "reiniciar" de alguna manera el javascript, para que tome el valor actualizado del hidden.

Es decir, la siguiente función funciona correctamente:

function enviar(){


comprueba_ajax(select_1.value,select_2.value);

//la función anterior mediante ajax, actualiza un hidden del formulario (lo hace bien)



alert ("HOLA");
alert (mi_hidden.value); //Y la segunda vez YA ha Tomado el valor actualizado


}


En cuanto quito el alert("HOLA"); Me dja de funcionar

¿Cómo puedo acceder a los valores actualizados por el Ajax?
¿Qué ocurre al realizar un alert?
¿Puedo provocar el mismo efecto de un alert,sin tener que mostrárselo al usuario?

Gracias de nuevo, y perdón por seperar los dospost.

Saludos Nacho.
  #3 (permalink)  
Antiguo 22/08/2007, 14:43
 
Fecha de Ingreso: agosto-2005
Ubicación: Argentina, Capital Federal
Mensajes: 435
Antigüedad: 18 años, 8 meses
Puntos: 2
Re: Tomar valor actualizado por Ajax

Sin tener el código para probarlo me da la sensación que el 1º alert hasta que presionas ACEPTAR le da tiempo suficiente a tu objeto de recibir la respuesta, tal como indicas en el primer post.
¿Has probado mostrar tu alert (mi_hidden.value); en el momento que tu propiedad readyState es == a 4?

Código PHP:
if(ajax.readyState==4)
{
// coloco el value del hidden con lo que corresponda
// obtengo el value del hidden, ahora si debe funcionar

De esta forma lo que podrías hacer es que al llegar el ajax.readyState==4 poner una variable bandera=true. Luego en tu main con setIntervall llamas periodicamente a una función que compruebe el estado de tu bandera; si es true continua ejecutando y limpia el intervalo sino, sigue verificando.

Otra cosa que puedes hacer es trabajar con el objeto AJAX de forma sincrónica enviando su 3º parámetro en false.

Cualquier cosa nos comentas, saludos.
__________________
R4DS en español | R4DS en inglés

Última edición por zaqpz; 22/08/2007 a las 14:52
  #4 (permalink)  
Antiguo 23/08/2007, 04:05
 
Fecha de Ingreso: agosto-2007
Ubicación: Torremolinos Málaga
Mensajes: 9
Antigüedad: 16 años, 8 meses
Puntos: 0
Re: Tomar valor actualizado por Ajax

Muchas gracias Zaqpz,

Por supuesto , también puse un alert dentro del readystate==4, y como era lógico funcionaba perfecto, pero me lanzaba antes el alert (vacío) de la función main (a pesar de que estaba "por debajo" de la llamada al ajax).

Voy a probar las dos ideas que me dijistes y ahora os cuento en un ratillo.
Aunque ya hice algo parecido a lo del del setinterval y no funcionó.

Vuelvo en un ratillo..

saludos a todos
  #5 (permalink)  
Antiguo 23/08/2007, 04:34
 
Fecha de Ingreso: agosto-2007
Ubicación: Torremolinos Málaga
Mensajes: 9
Antigüedad: 16 años, 8 meses
Puntos: 0
De acuerdo Re: Tomar valor actualizado por Ajax

BIEN!!!!!

A veces se nos olvida lo más fácil y obvio.

Haciendo la llamada a Ajax sincrona me ha funcionado correctamente...

MI única duda ahora es... ¿Por qué no se me ocurrió a mi???

jejeje

Para los que han seguido el hilo, el único cambio que hice fue el siguiente:


sustituí

con.open('GET',ruta_php,true);
Por
con.open('GET',ruta_php,false);

Y listo!!!

Muchas gracias Zaqpz
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 23:46.