Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/03/2016, 07:25
santi85
 
Fecha de Ingreso: abril-2013
Mensajes: 3
Antigüedad: 11 años
Puntos: 0
Detener envio de formulario con Ajax

Hola!

Estoy realizando las validaciones de un formulario de registro y quiero hacerlas con Ajax. Una de las validaciones que quiero hacer es, verificar si en la base de datos está el email que el usuario quiere registrar, si éste existe ahí nomas le sale una notificación (en el div #info_error) que ese mail no esta disponible y si esta disponible no notifica nada.

Éste es el codigo del formulario:

Código HTML:
<form id="registerForm" class="registerForm" method="POST">
        <ul>            
            <li>
                <label for="registerEmail">*Email:</label><div id="info_error"></div>                
                <input id="registerEmail" class="" type="email" name="email" required>                 
            </li>
            <li><label for="registerPass">*Contraseña:</label>
                <input id="registerPass"  class="" type="password" name="pass" minlength="5" required>
            </li>
        </ul>
        <button id="registerBtn" type="submit">Registrarse</Button>
</form> 
Aquí el Ajax:

Código Javascript:
Ver original
  1. $(document).ready(function() {
  2.    $('#registerEmail').blur(function(e){
  3.        
  4.         var email = $('#registerEmail').val();    
  5.        
  6.         var dataString = '&email='+email;
  7.  
  8.         $.ajax({
  9.             type: "POST",
  10.             url: "ajax/email_existense.php",
  11.             data: dataString,          
  12.             success: function(resp){
  13.                 if(resp == 1){
  14.                     $('#registerEmail').on('focus', function(){
  15.                         $('#info_error').hide().html('<div id="email_not_enable">Email ya registrado. <a href="index.php?page=login">Inicia Sesión</a></div>');
  16.                     });                    
  17.                     $('#info_error').show().html('<div id="email_not_enable">Email ya registrado. <a href="index.php?page=login">Inicia Sesión</a></div>');    
  18.                    
  19.                     $("#registerForm").submit(function(){
  20.                         return false;                        
  21.                     })
  22.                
  23.                 }else{
  24.                    
  25.                     $("#registerForm").submit(function(){
  26.                         return true;                        
  27.                     })
  28.                 }
  29.                
  30.             }            
  31.         });
  32.     });
  33. });

Y aqui el código php donde verifico si el mail esta en la base de datos o no.

Código PHP:

if($_POST) {          
   
$email $_POST['email'];
}

$sql "SELECT email FROM users WHERE email = '$email'";

$result dbquery($sql);                

if(
dbgetNumRows($result) > 0){
            
   echo 
1;
                            
}else{
               
  echo 
0;


Bien!. He aquí el problemilla que tengo. Primero aclaro que soy principiante en Javascript y Ajax, pero de problemas se aprende, . Lo que quiero hacer, básicamente, es que si el email existe en la base de datos el formulario no se envíe y si no existe que se envíe normalmente.

Entonces, si el email que el usuario ingresa no esta registrado en la base de datos, el php devuelve un cero, pasa al Ajax y el .submit() me da un true y manda el formulario.

Hasta ahí, todo bien, funciona. Pero, cuando el email esta registrado en la base de datos, el php devuelve un uno y Ajax manda la notificación diciendo que el email esta registrado y el .submit() da un false y no se envia el formulario. EL PROBLEMA, es que al cambiar en ese momento el email por uno válido, que no este en la BD, se borra la notificación correctamente, peeeero no me deja enviar el formulario, es como que el .submit() sigue siendo falso, por mas que el php haya devuelto cero en ese momento.

La parte de conexion a la BD y el INSERT lo hago en otros archivos php aparte.

Seguramente estoy haciendo algo mal con el .submit(). Si alguien es tan amable de darme una mano con este tema se lo agradecería a montones .

Desde ya muchisimas gracias por su tiempo, un gran saludo!