Ver Mensaje Individual
  #9 (permalink)  
Antiguo 21/04/2018, 05:01
sentoki79
 
Fecha de Ingreso: octubre-2013
Mensajes: 79
Antigüedad: 10 años, 6 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