Tengo una funcion Javascript que busca un valor en la base de datos para ver si está duplicado (Ajax) y debería retornar una variable con un mensaje, pero no lo hace. Bueno, lo hace cuando antes del return, le pongo un alert..
![Pensando](http://static.forosdelweb.com/fdwtheme/images/smilies/scratchchin.gif)
A ver si pueden darme una mano:
Código:
function email_duplicado(valor) { // alert(valor); valor entra bien porque lo muestra en el alert var mensaje = ''; if(valor!=0) { ajax=ObjetoAjax(); // Envio al servidor el valor y el campo a validar // Este asp busca en la bd y escribe "Duplicado" para que lo tome // el ajax.responseText ajax.open("GET", "email_duplicado_en_bd.asp?valor="+valor, true); ajax.onreadystatechange=function() { if (ajax.readyState==4) { // Coloco en la fila contenedora los datos que recibo del servidor if (ajax.responseText == 'Duplicado') { mensaje = 'El email ya está registrado en la base de datos. Si usted ya se registró, debe ir a la opción : Su cuenta ---> Ingresar al sistema.'; // OJO 01 //alert(mensaje); el mensaje se muestra, es decir, // entra en el IF // return mensaje; } } } ajax.send(null); // OJO 02: alert(mensaje); cuando pongo este alert, me muestra // en blanco el mensaje, sin embargo solo colocandolo retorna el // valor en la función. return mensaje; } }
ahora paso a explicar un poco como se ha comportado la funcion.
Originalmente funcionaba porque no requeria retornar ningun valor, solo hacía un alert con el mensaje.
El asunto es que necesito poner TODOS los errores en una sola ventana de alert y lo que voy haciendo es concatenar todos los errores para mostrarlos al final. Esta función es solo de la parte que valida el email duplicado y debería retornar el mensaje para que la función que la llama lo concatene.
Les puedo mencionar los siguientes puntos:
1- El valor que entra como parametro está ok porque se muestra en un alert.
2.- el asp email_duplicado_en_bd.asp funciona correctamente porque lo he probado aparte.
3.- Cuando el email está duplicado se mete en el if ajax.responseText == 'Duplicado'
4.- (OJO 01) Luego de asignarle el valor a la variable hago un alert y se muestra bien. Asi funcionaba originalmente.
5.- Si hago el return mensaje; despues de el alert o sin él, retorna un valor UNDEFINED. Supongo que esto es porque no he hecho el ajax.send(null)
6.- (OJO 02) pongo el return mensaje luego del ajax.send(null) entonces retorna un valor vacío. No undefined como el punto anterior.
7.- Alli es donde viene lo (más) confuso, si le agrego un alert antes del return, me lo muestra VACIO, sin embargo RETORNA CORRECTAMENTE EL VALOR!!
Al quitar el alert, me retorna un valor vacio nuevamente.
Quiero decir que si le pongo un alert antes, cumple la función de enviar el mensaje de retorno, pero me abre 2 ventanas, el alert que estoy obligado a poner para que funcione y el otro alert que lleva todos los mensajes de error concatenados. Es una función que llama a otras que retornan mensajes. Al recibirlos los concatena y los muestra todos en una sola ventana.
Yo no se mucho (por no decir nada) de Javascript y por eso supongo que alguno de ustedes puede ver si hay una burrada evidente
![Patada](http://static.forosdelweb.com/fdwtheme/images/smilies/footinmouth.png)
Creo que el error tiene que ver con la combinación de un javascript que usa Ajax y que a su vez retorna un valor. Todas las funciones Ajax que he visto solo hacen alert para mostrar el resultado.
No se que hace el ajax.send(null); pero se que es necesario para que funcione correctmente. Intenté (lanzando flechas) poner ajax.send(mensaje) pero no funcionó...
![lloron](http://static.forosdelweb.com/fdwtheme/images/smilies/chillando.png)
Saludos y gracias a todos por su ayuda,
Luis Vásquez