Ajax + PHP + MySQL

40 views
Skip to first unread message

Jose Luis Benito

unread,
Mar 14, 2011, 3:03:28 PM3/14/11
to phpbar...@googlegroups.com
Hola a todos, tengo un problema tonto, seguro que más de uno lo ha
solucionado, pero yo ahora mismo (llevo toda la tarde) no hay manera de
localizar el error. Os explico, y abajo os dejo el codigo. Tengo un
formulario, que solicito varios datos, uno de ellos es el email. Antes
de hacer la insercion del usuario quiero comprobar con la bbdd que el
email no exista con anterioridad (os pongo el codigo que uso)
****
var respuesta="";
if(form.email.value==""){
var envio="NO";
divEmail.innerHTML = "<h3><font color='red'>E-mail</font></h3>";
}else{
var email=form.email.value;
ajax=objetoAjax();
ajax.open("POST","confUsuario.php?email="+email, true);
ajax.onreadystatechange=function() {
if (ajax.readyState==4) {
respuesta = ajax.responseText;
alert("respuesta " + respuesta);
if(respuesta=="0"){
divEmail.innerHTML = "<h3>E-mail</h3>";
}else{
var envio="NO";
divEmail.innerHTML = "<h3><font
color='red'>E-mail</font></h3>";
divEmail2.innerHTML = "<h3><font color='green'>Ya
existe un usuario con este email.</font></h3>";
}
//divResultado.innerHTML = "holla"
}
}
ajax.send(null);
}
alert("respuesta " + respuesta);
***

La cuestion es que la consulta y todo lo hace bien, ... pero mientras
que en el primer aler me da un valor (lo que sea) en el segundo alert ya
ha perdido ese valor, por lo tanto desvirtua el resto del script.

Se que el nivel de la pregunta es mas bien 'tonto' pero me esta dando
dolores de cabeza.... y por mas que he buscado (se que hay montones de
ejemplos) ahora que los necesito no lo encuentro.

--
Salutacions
Jose Luis Benito
Tel. 671 085 000

---------------------------------------------------------------------
J&Dmultimedia.net
Tel. 93 307 98 38
correu: jlbe...@jdmultimedia.net
web: http://www.jdmultimedia.net
skype: jlbenito72
---------------------------------------------------------------------
Aquest correu electrònic i els seus fitxers adjunts es dirigeixen exclusivament al seu destinatari i poden contenir informació confidencial, sotmesa a secret professional segons la legislació vigent.
Si ha rebut aquest missatge per error, li demanem que ens ho faci saber i l'esborri immediatament.

Este correo electrónico y los ficheros adjuntos se dirigen exclusivamente a su destinatario y pueden contener información confidencial, sometida a secreto profesional según la legislación vigente.
Si recibe este mensaje por error, le rogamos que nos lo haga saber y lo borre inmediatamente.
---------------------------------------------------------------------


César Escribano

unread,
Mar 14, 2011, 5:14:59 PM3/14/11
to phpbar...@googlegroups.com, Jose Luis Benito
Hola Jose Luis,

Debe ser porque estás usando ajax asíncrono, y para cuando llega la respuesta del ajax, el segundo alert ya se ha ejecutado. Para que la petición se haga de forma síncrona, prueba a cambiar el tercer parámetro del ajax.open() a false

       ajax.open("POST","confUsuario.php?email="+email, false);

De todas formas el ajax síncrono es muy poco recomendable, porque la página se queda bloqueada durante el tiempo que el ajax tarde en responder. Deberías tratar de hacer todo en el onreadystatechange


Un saludo,

César Escribano


2011/3/14 Jose Luis Benito <jlbe...@jdmultimedia.net>


--
Has recibido este mensaje porque estás suscrito al grupo "Grupo de programadores PHP de Barcelona" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a phpbar...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a phpbarcelona...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/phpbarcelona?hl=es.


Juan Antonio Galan Martinez

unread,
Mar 14, 2011, 5:09:47 PM3/14/11
to phpbar...@googlegroups.com
Hola Jose Luis,

Hace tiempo que no me peleo con estas cosas, pero si no estoy equivocado lo que pasa es que estas inicializando la variable respuesta dentro de una función y por tanto el "scope" de esa variable es esa función. Por tanto una vez se acaba la ejecución de esa función no puedes esperar tener el valor en el "scope" global.

Un saludo

Juan Antonio Galan

Jose Luis Benito

unread,
Mar 15, 2011, 12:35:28 AM3/15/11
to phpbar...@googlegroups.com
Tema solucionado .... gracias a todos por las respuestas.

Salutacions
Jose Luis Benito
Tel. 671 085 000

---------------------------------------------------------------------
J&Dmultimedia.net
Tel. 93 307 98 38
correu: jlbe...@jdmultimedia.net
web: http://www.jdmultimedia.net
skype: jlbenito72
---------------------------------------------------------------------
Aquest correu electrònic i els seus fitxers adjunts es dirigeixen exclusivament al seu destinatari i poden contenir informació confidencial, sotmesa a secret professional segons la legislació vigent.
Si ha rebut aquest missatge per error, li demanem que ens ho faci saber i l'esborri immediatament.

Este correo electrónico y los ficheros adjuntos se dirigen exclusivamente a su destinatario y pueden contener información confidencial, sometida a secreto profesional según la legislación vigente.
Si recibe este mensaje por error, le rogamos que nos lo haga saber y lo borre inmediatamente.
---------------------------------------------------------------------

Reply all
Reply to author
Forward
0 new messages