Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

115
Vistas
validación de correo electrónico y verificación de correo electrónico existente usando ko.observable

quiero aplicar validaciones en el correo electrónico si el correo electrónico es válido o no, y después de eso verifique en db usando ajax para verificar que el correo electrónico ya existe y el correo electrónico que ya existe, la verificación debería funcionar si se pasa la primera verificación, esto es lo que hice, estoy atascado en email_ya_exist verifique cómo validar solo si se pasa la verificación anterior, si alguien tiene idea de cómo hacerlo

 // code which checking email is valid email: ko.observable((ref = REGISTRY.unsavedUser) != null ? ref.email : void 0).extend({ required: true, email: { params: true, message: 'Please enter a valid email.' }, focus:true }), // function to check email exists var email_exist_check = function() { var errorElement = $('#parent-email-signup'); var emzil = errorElement.val(); return = $.ajax({ url: '/api/v3/email_exists', method: 'POST', async: false, data: { email: emzil }, success: function(data){ console.log(data); }, error: function (response, status) { showFlashMessage('An error occured, please try again later.', 'error'); } }); };

la función de correo electrónico existente está lista, estoy atascado en cómo usarlo en el código anterior, por favor ayuda

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Nunca, nunca, nunca use async: false en llamadas Ajax.

Que necesitas:

Un envoltorio API, para mayor comodidad y legibilidad del código más adelante.

 const API = { email_exists: function (email) { return $.post('/api/v3/email_exists', { email: email }).then(function (result) { // evaluate result & return true (email exists) or false (email is free) return ...; }).fail(function (jqXhr, status, error) { showFlashMessage('An error occured, please try again later.', 'error'); console.log('Error in email_exists', email, jqXhr, status, error); }); }, // add other API functions in the same way };

y regla de validación asíncrona que llama a su API:

 ko.validation.rules.emailFromAPI = { async: true, validator: function (val, params, callback) { API.email_exists(val).done(function (exists) { callback(!exists); // validation is successful when the email does not exist }); }, message: 'Please enter a valid email.' };

un observable que usa esta regla:

 email: ko.observable((ref = REGISTRY.unsavedUser) != null ? ref.email : void 0).extend({ required: true, emailFromAPI: true, focus:true }),
about 4 years ago · Juan Pablo Isaza Denunciar

0

Dado que ajax es asíncrono, tendrá que esperar la respuesta del servidor, devolver la llamada ajax no esperará a que se resuelva la llamada del servidor. Una forma de resolver esto es usar una devolución de llamada (otra sería promesas con async/await)

 var email_exist_check = function(email, onSuccess, onError) { $.ajax({ url: '/api/v3/email_exists', method: 'POST', async: false, data: { email }, success: function(data){ console.log(data); if (data && !data.error) { return onSuccess(); } return onError(data && data.error); }, error: function (response, status) { onError(response); } }); }; // After doing a front-end email verification email_exist_check(ref.email, () => { console.log('Email is valid'); }, (error) => { console.error('Something went wrong', error); });
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda