gracias @Dradi7, ahora si puedo ver claramente uno de los problemas y espero @satjaen que no tomes mal el regaño, yo ya estaba a punto de hacerlo, sólo ten en cuenta que no es nada personal y que nosotros queremos que aprendas
Volviendo al tema:
recuerda que AJAX es
asíncrono, por lo tanto no puedes retornar a la función anterior el resultado de la petición AJAX, porque siempre te devolverá null o false, la solucíon radical para que funcione es que lo coloques de modo sincrono, lo cual NO es lo ideal.
La solución
Ideal es pasar el
callback, de esa forma no se pierde el flujo debido al desfase de la petición asíncrona, he aquí la técnica:
Código Javascript
:
Ver originalfunction nuevoAjax() {
var xmlhttp=false;
try {
xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e){
try{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}catch(E) {
if (!xmlhttp && typeof XMLHttpRequest!='undefined')
xmlhttp=new XMLHttpRequest();
}
}
return xmlhttp;
}
function TelefonoExiste(telefono, _callback) {
var ajax=nuevoAjax();
ajax.open("GET", "valida1.php?telefono=" + encodeURIComponent(telefono), true);
ajax.onreadystatechange=function() {
if ((ajax.readyState==4) && (ajax.status==200)){
//ejecutamos _callback como si fuese una función, pasandole el parámetro
_callback(ajax.responseText);
}
}
ajax.send(null);
}
function GuardaFormulario() {
//usemos mejor las CoLECCIONES, y variables, así ahorramos codigo y lo hace fácil de mantener
var _telefono = document.forms['form1'].elements['telefono'];
if (_telefono.value.length == 0){
alert("Insertar el Teléfono");
_telefono.focus();
return 0;
}
//lamamos a AJAX:
TelefonoExiste(_telefono.value, function(resp) {
//evaluamos la respuesta del server, tengase en cuenta que responseText devuelve un string, por lo tanto hay que parsear a entero si se evalúa un numero:
if (parseInt(resp) == 1) {
//aqui seria bueno un mensaje
alert('el teléfono ya existe');
_telefono.focus();
} else {
//evaluar si se envía el form desde aquí, o se usa ajax para enviarlo.
alert("El formulario se envio con exito!");
document.forms['form1'].submit();
}
});
//como ajax es asincrono, JS NO se detendrá en la llamada anterior, por lo tando hay que retornar false o 0 como lo tienes:
return 0;
}