21/04/2018, 05:01
|
| | Fecha de Ingreso: octubre-2013
Mensajes: 79
Antigüedad: 11 años, 2 meses Puntos: 1 | |
Respuesta: Problema al devolver resultado de una funcion Hola,
de nuevo muchas gracias por aportar soluciones.
Si voy adjuntar el codigo mejor :) Código HTML: <form id="registro"><br>
<h3>Todos los campos son obligatorios</h3>
<label>Nombre de usuario: </label>
<input type="text" id="nameUser" class="input" onchange="nuevoUsuario(this.value)">
<label>DNI: </label> <input required type="text" id="DNI" /><p class="advertencia2"> *EL DNI ha de tener el formato, ejemplo: 12345678A</p><br>
<p class="advertencia1">*las contraseñas han de tener entre 6 y 16 caracteres contener al menos una letra mayuscula, un numero y una letra minuscula</p>
<label>Contraseña:</label>
<input required type="password" id="password1"/>
<label>Repita la contraseña:</label>
<input required type="password" id="password2" />
<label>Su nombre:</label>
<input required type="text" id="nombre" />
<label>Primer apellido:</label>
<input required type="text" id="apellido1" />
<label>Segundo apellido:</label>
<input required type="text" id="apellido2" />
<label>Email:</label>
<input required type="text" id="email" />
<label>Telefono:</label>
<input required type="text" id="TLF" />
<a id="envio" onclick=" registrarse()">Registrarse</a>
</form>
Código:
function registrarNombre(){
return true;
}
function nuevoUsuario(nombre){
alert(nombre)
verificarDisponibilidad(nombre).then(function(respuesta){
if (respuesta){ //Cero equivale a "false"
registrarNombre();
}
else{
alert("El nombre ya se encuentra registrado");
}
});
}
function verificarDisponibilidad(nombre){
return new Promise(function(exito, error){
var xhr=nuevoAjax()
xhr.open("POST", "http://localhost:8080/Front/CompruebaNombreUsuario", true);
xhr.send(nombre);
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);
});
}
function registrarse() {
//se crea una clase persona y una clase usuario que hereda propiedades de esta
function persona(nombre, apellido1, apellido2, DNI) {
this.nombre = nombre;
this.apellido1 = apellido1;
this.apellido2 = apellido2;
this.DNI = DNI;
}
usuario.prototype = new persona;
function usuario(nombreUsuario, password, email, telefono, nombre, apellido1, apellido2, DNI) {
persona.call(this, nombre, apellido1, apellido2, DNI)
this.nombreUsuario = nombreUsuario;
this.password = password;
this.email = email;
this.telefono = telefono;
}
//se crea un metodo para enviar los datos de cada objeto usuario al servidor
usuario.prototype.enviaInfo = function () {
return "login=" + this.nombreUsuario + "&password=" + this.password + "&nombre=" + this.nombre + "&apellido1=" + this.apellido1 + "&apellido2=" + this.apellido2 + "&DNI=" + this.DNI + "&email=" + this.email + "&telefono=" + this.telefono;
}
/*creo un metodo a partir de la clase string. Por la posibilidad de los dispositivos moviles
tengan configurado de que la primera letra de cada frase empiece por mayusculas. Posteriormente le pasare el metodo toLowerCase por si hubieran mas letras en minusculas.
Podria haber pasado el metodo toLowrString directamente, pero me hacia ilusion crear ese metodo. :)*/
String.prototype.ToLowerFirstCase = function () {
primeraLetra = this.substring(0, 1)
return this.replace(nombreUsuario.substring(0, 1), primeraLetra.toLowerCase());
}
/*Aqui se recogen el valor de las variables y se llamara a la funcion para validar uno a uno los datos
a ver si son correctos*/
/*utilizo el metodo trim() por si el usuario introduciera un espacio en blanco sin querer para que no hayan
problemas al interactuar con la base de datos al hacer consultas sobre ese dato guardado*/
var nombreUsuario= document.getElementById("nameUser").value.trim();
var password1 = document.getElementById("password1").value.trim();
var password2 = document.getElementById("password2").value.trim();
var nombre = document.getElementById("nombre").value.trim();
var apellido1 = document.getElementById("apellido1").value.trim();
var apellido2 = document.getElementById("apellido2").value.trim();
var DNI = document.getElementById("DNI").value.trim();
var email = document.getElementById("email").value.trim();
email = email.toLowerCase();
var telefono = document.getElementById("TLF").value.trim();
var formulario = validarFormulario(usuario, password1, password2, nombre, apellido1, apellido2, DNI, email, telefono)
var compruebaNombreUsuario=registrarNombre();
//llamo al constructor usuario y creo un nuevo objeto usuario
//implemento el metodo creado con prototype sobre la variable email
var usuario= new usuario(nombreUsuario, password1, email.ToLowerFirstCase(), telefono, nombre, apellido1, apellido2, DNI)
//se comprueba de si no han habido errores en el formulario se prepara el envio de datos al servidor
if (formulario == true&&compruebaNombreUsuario==true) {
//con esta linea al enviar el formlario el boton de enviar se vuelve no accesible
//datos que se recogen del metodo de la clase usuario para el envio por POST:
var datos = usuario.enviaInfo();
var xhr = nuevoAjax();
var url = "Registro";
xhr.open("POST",url, true );
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xhr.send(datos);
alert("Se ha dado de alta")
}
}
Bueno he puesto tambien la funcion registrarse que aunque hay un poco de morralla para lo que seria resolver el problema, he creido que meor dejo todo el codigo para que no "despiste" el ver qu faltan cosas.
El alert en la funcion nuevoUsuario() ahi es donde muestra el objeto del input en vez del valor del input.
Como veras he creado una tercera funcion la de compruebaNombreUsuario() que si es llamada retorna true, porque no estaba seguro que llamando a la otra funcion no volviera a pasar que devolviera undefined. Bueno se puede modificar o dejar asi solo era por darle una explicacion.
Gracias :) saludos |