Para usar las dos soluciones del final, es necesario que reescribas esa parte de tu código de la forma en la que se muestra en los ejemplos de arriba.
En lugar de esto:
Código Javascript
:
Ver originalvar respuesta2=rellenaLista()
alert(respuesta2)
if(respuesta2==0){return false;}
Debe ser así para la promesa:
Código Javascript
:
Ver originalrellenaLista().then(function(respuesta){
if (!respuesta){
alert("El nombre de usuario que ha elegido no esta disponible. Por favor eliga otro para ver si esta disponible para usted.");
return false;
}
});
Y así para el
callback:
Código Javascript
:
Ver originalrellenaLista(function(respuesta){
if (!respuesta){
alert("El nombre de usuario que ha elegido no esta disponible. Por favor eliga otro para ver si esta disponible para usted.");
return false;
}
});
Así, tal como lo ves, sin el
var respuesta2
. Solo lo que se muestra.
----------------------------
Por otro lado, para este tipo de problemas en los que se ejecutan procesos asincrónicos, es preferible evitar el uso de devolución de respuestas mediante la sentencia
return
(error mío al elaborar el ejemplo con dicha sentencia) y, en su lugar, apoyarse en el trabajo con promesas o
callbacks.
Dicho esto, lo deseable sería trabajar de una manera similar a esta:
Código Javascript
:
Ver originalfunction nuevoUsuario(nombre){
verificarDisponibilidad(nombre).then(function(respuesta){
if (!respuesta){ //Cero equivale a "false"
registrarNombre(nombre);
}
else{
alert("El nombre ya se encuentra registrado");
}
});
}
function verificarDisponibilidad(nombre){
return new Promise(function(exito, error){
var xhr = new XMLHttpRequest();
xhr.open("GET", "verificar.php?nombre=" + nombre);
xhr.send();
xhr.addEventListener("load", function(){
if (this.status == 200){
exito(this.responseText); //La respuesta será el número de coincidencias del nombre en la base de datos
}
}, false);
});
}
nuevoUsuario("sentoki79");
Así nos olvidamos de los
return
y trabajamos utilizando las bondades del desarrollo actual de ECMAScript.