2009-10-14 44 views
15

Estoy usando la validación jquery y necesito validar un correo electrónico.jquery validación con llamada ajax

utilizo

$("#myForm").validate({ 
     rules: 
      email: { 
       required: true, 
       email: true 
      } 
}) 

hasta ahora tan bueno. El problema es que tengo que hacer una llamada ajax para verificar si el correo electrónico ya existe. Si existe, mostrar el mensaje "Este correo electrónico ya se cierra. Seleccione otro".

¿Alguien me puede ayudar a implementar esto.

Respuesta

16
remote: "/some/remote/path" 

Ese camino se pasará el valor del campo en un $ _GET. por lo .. lo que realmente se llama en su caso sería:

/some/remote/path?email=someemailuriencoded 

tiene el código del lado del servidor de retorno sólo el texto verdadero o falso.

A continuación, el mensaje correspondiente también se denomina control remoto.

remote: "The corresponding email already exists" 

Mi código para algo similar:

$("#password_reset").validate({ 
    rules: { 
    email: { required: true, email: true, minlength: 6, remote: "/ajax/password/check_email" } 
    }, 
    messages: { 
    email: { required: "Please enter a valid email address", minlength: "Please enter a valid email address", email: "Please enter a valid email address", remote: "This email is not registered" } 
    }, 
    onkeyup: false, 
    onblur: true 
}); 

El código del lado del servidor correspondiente en php:

$email_exists = $db->prows('SELECT user_id FROM users WHERE email = ? LIMIT 1', 's' , $_GET['email']); 
if ($email_exists) { echo 'true'; } else { echo 'false'; } 
exit; 

Por supuesto que está usando mis cosas abstracción de base de datos, pero usted lo consigue.

+0

Gracias Daren . Voy a probarlo, creo que es –

+0

cómo puedo agregar mensajes solo para control remoto ... o cómo puedo 'hacer algo' onsuccess – jack

+0

Me acabas de ahorrar horas. Gracias – Sino

0

¿Cuál es el idioma de su servidor? PHP o ASP?

Esta es la parte de jQuery:

$.ajax({ 
    type: "POST", 
    url: "YourWebserviceOrWhatEver", 
    data: "{'Email':'[email protected]'}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(msg) { 
     if(msg.EmailExists){ 
     //Email exists 
     alert("This email already exists. Please select other"); 
     } 
     else { 
     //Email doesn't exist yet 
     doSomething(); 
     } 
    } 
}); 
+0

está usando validate, que tiene el ajax incorporado. –

+0

Creo que el autor quiso decir el uso del complemento de validación de jQuery: http://docs.jquery.com/Plugins/Validation. No solo una llamada ajax. – Kamarey

+0

Ah ok, no sabía eso – k0ni

7

Bueno, esto funciona para mí ...

$('[id$=txtEmail]').rules("add", { required: true, email: true, 
     remote:function(){ 
       var checkit={ 
        type: "POST", 
        url: WebServicePathComplete+"VerifyEmail", 
        contentType: "application/json; charset=utf-8", 
        dataType: "json", 
        data: "{'email':'" +$('[id$=txtEmail]').val() + "'}" 
       }; 
       return checkit; 
     } 
    }); 

nota que tengo una entrada con el ID 'txtMail'