jQuery preventDefault() ne fonctionne pas à l'intérieur d'appel AJAX

Donc, je suis en train de faire une vérification lorsqu'un utilisateur tape un mail afin de savoir si l'email existe ou pas.

 $('form.recover-form#check-form').on('submit', function(e){

    var form    = $(this),
        input   = $('.check-recover-email'),
        span    = $('.recover-error'),
        email   = input.val();
    span.text('');
    e.preventDefault();
    $.ajax({
        url: 'ajax/check-email',
        async: 'false',
        cache: 'false',
        type: 'POST',
        data: {email: email},
        success: function(response) {
            if ( response == 'no' ) {
                span.text('email does not exist');
            } else if ( response == 'ok' ) {
                form.submit();
            }
        }
    });
});

Le code php

if ( Input::isPost('email') )  {

    $email = Input::post('email');

    $check = $dbh->prepare(" SELECT * FROM users WHERE email = :email ");
    $check->execute(array( 'email' => $email ));

    echo ( $check->rowCount() == 1 ) ? 'ok' : 'no' ;

}

De cette façon, dès que j'ai envoyer le formulaire, il soumet et la e.PreventDefault() à l'intérieur de l'appel AJAX ne fonctionne pas. Si j'ai mis e.PreventDefault() avant l'appel AJAX cependant, la forme ne se soumet pas et le message d'erreur s'affiche si l'email n'existe pas ( c'est ce que je veux atteindre ).

Je ne comprends pas où est le problème, j'espère que vous pouvez aider.

Merci.

EIDT: C'est la mise à jour du code

  • vous ne pouvez pas le faire en raison de la nature asynchrone des requêtes ajax...
  • Il suffit de le garder à l'extérieur de la demande que votre faisaient..
  • e.preventDefault(); ne fonctionne pas parce que l'ajax est asynch appel. Veuillez faire de l'ajax de synchronisation ou de l'utilisation de rappel d'arriver à ce
  • Le flux des choses est un peu déroutant ici. Ce qui se passe réellement, c'est qu'ils l'utilisateur soumet le formulaire qui déclenche une requête ajax qui s'exécute en arrière-plan. Lorsque cette requête retourne vous essayez d'annuler l'événement submit, mais il est loin de la fin, elle l'a depuis longtemps terminée.
  • Oui je comprends que la preventDefault() ne fonctionne pas à l'intérieur de l'appel ajax, mais si je le déplacer vers le haut avant de l'ajax, comment puis-je le reprendre ensuite l'envoyer et aller sur la soumission du formulaire, si l'appel ajax est un succès ?
InformationsquelleAutor C. Ovidiu | 2014-03-31