Como AJAX es un modelo de comunicación asincrónico, tienes tres opciones para resolver esto:
1. El tercer argumento del método
.open()
debe ser
false
para que la operación se vuelva sincrónica:
Código Javascript
:
Ver originalajax.open("POST", "http://localhost:8080/Front/CompruebaNombreUsuario", false);
2. Utiliza una
promesa:
Código Javascript
:
Ver originalfunction rellenaLista(){
var nombreUsuario = document.getElementById("nameUser").value,
ajax = nuevoAjax();
return new Promise(function(exito, error){
ajax.open("POST", "http://localhost:8080/Front/CompruebaNombreUsuario", true);
ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
ajax.send(busqueda);
ajax.onreadystatechange = function(){
if (ajax.readyState == 4 && ajax.status == 200){
exito(ajax.responseText);
}
}
});
}
rellenaLista().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;
}
});
3. Utiliza un
callback o llamada de retorno:
Código Javascript
:
Ver originalfunction rellenaLista(callback){
var nombreUsuario = document.getElementById("nameUser").value,
ajax = nuevoAjax();
ajax.open("POST", "http://localhost:8080/Front/CompruebaNombreUsuario", true);
ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
ajax.send(busqueda);
ajax.onreadystatechange = function(){
if (ajax.readyState == 4 && ajax.status == 200){
callback(ajax.responseText);
}
}
}
rellenaLista(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;
}
});
Simplifiqué la parte en la que retornas la respuesta ya que, un resultado 0, también es interpretado como
false
; mientras que, un resultado mayor a 0, es interpretado como
true
. De allí que se envíe la respuesta obtenida desde el servidor para determinar si es
true
(mayor a cero, se puede usar el nombre de usuario) o
false
(igual a cero, no se puede usar el nombre de usuario).
Aunque creo que esto último en realidad debe ser al revés, es decir, si se obtiene una o más coincidencias en la base de datos, no se debe permitir usar el nombre de usuario y, si no se obtiene ninguna coincidencia, se debe permitir usar el nombre de usuario, decidí dejarlo como lo vienes usando porque no estoy seguro de qué información recibes desde el servidor.