2010-11-10 6 views
0

J'ai une fonction de validation de formulaire qui valide et vérifie également si le nom d'utilisateur est pris ou non (ajax).Pourquoi cette fonction retourne-t-elle "indéfini"?

Voilà comment j'appelle le code:

function validate(){ 
    if(usernameValid()){ 
     return true; 
    } 
    else { 
     return false; 
    } 

} 

J'alertent également la fonction afin de voir ce qu'il retourne:

alert(usernameValid()); 

Le problème est que les alertes Alertbox « indéfinis » dans Dans certains cas, ma validation ne passera pas au champ suivant, elle se bloque. Pour être plus précis, il alerte "Undefined" dans tous les cas sauf quand la "length === 0", il alerte false ce qui est correct.

Voici la fonction usernameValid:

function usernameValid(fld) { 
    if($('#username').val().length !== 0) { 
     $.post("username_check.php", { 
     username: $('#username').val() 
     }, function(response){ 
      response = escape(response); 

      if(response==1){ 
      $('#username_error_invalid').show(); 
      $('#username_error_empty').hide(); 
      $('#username_error_taken').hide(); 
      return false; 
      } 
      else if(response==2){ 
       $('#username_error_taken').show(); 
        $('#username_error_invalid').hide(); 
       $('#username_error_empty').hide(); 
       return false; 
      } 
      else { 
       $('#username_error_taken').hide(); 
        $('#username_error_invalid').hide(); 
       $('#username_error_empty').hide(); 
       return true; 
      } 
     }); 
    } 
    else{ 
     $('#username_error_empty').show(); 
     $('#username_error_invalid').hide(); 
     $('#username_error_taken').hide(); 
     return false; 
    } 
} 

Tout le monde sait ce qui est faux, à savoir pourquoi les rendements de code non défini dans les cas où je tester la variable « réponse »?

BTW: La validation lui-même pour le nom d'utilisateur fonctionne (erreur apparaît quand il doit, etc), mais il retourne ... non défini

Merci

Répondre

2

Ceci est un appel asynchrone:

$.post("username_check.php", {.... 

Ainsi, les instructions return dans le rappel se produisent longtemps après usernameValid renvoie (et puisqu'il n'a pas retourné quoi que ce soit lorsqu'il a été exécuté, il est undefined).

Si vous avez return false; vous devez appeler une autre fonction, par exemple: userNameInvalidFunction(), et quelque chose d'autre pour true ... ou tout simplement continuer à soumettre, etc.

L'alternative est de faire appel AJAX synchrone ... mais recommande fortement, car il va verrouiller complètement le navigateur de l'utilisateur pendant son exécution.

+0

Soin de fournir un exemple de la userNameInvalidFunction() afin que je comprenne entièrement? et que voulez-vous dire exactement par "quelque chose d'autre pour vrai"? –

+0

@ Camran - par ex. Au lieu de s'appuyer sur la valeur 'return', vous ne lancez que les autres fonctions lorsque la réponse du serveur revient, pensez à remplacer 'return true;' par 'functionToCallWhenValid()' et 'return false;' par ' functionToCallWhenInvalid() '. –

+0

est-il possible de retourner true/false à l'intérieur de ces fonctions, ou voulez-vous dire que je dois appeler la fonction "validation_function" suivante dans functionToCallWhenValid() ou peut-être afficher un message d'erreur dans functionToCallWhenInvalid()? –

Questions connexes