2010-12-07 24 views
1

J'essaie de faire une vérification ajax de la disponibilité du nom d'utilisateur et de soumettre un formulaire seulement si le nom d'utilisateur est disponible.jQuery Validation - submitHandler et réponse AJAX

Utiliser le plugin jQuery Validation, j'ai mis:

 submitHandler: function(form) { 
     if (ajaxCheck() == true){ 
      alert('true'); 
     } 
    } 

Et ma fonction de vérification nom d'utilisateur ressemble à ceci:

function ajaxCheck(){ 
usernameVal = $("#username").val().toLowerCase(); 
usernameVal = usernameVal.replace(/[\s\W]/g, ''); 
$.post("/app/signup/username/", { 
username: usernameVal 
}, function(response){ 
    if (response == "Username not available.") { 
     $("#signup").validate().showErrors({ "username" : "Username Not Available." }); 
     alert('false'); 
     return false; 
    } else { 
     alert('true'); 
     return true; 
    } 
}); 

}

Le problème est qu'il ne revient pas vrai ou faux au soumissionner. Je ne suis pas sûr si c'est parce que les déclarations de retour sont dans le $ .post?

Si j'exécute l'ajaxCheck de manière indépendante, il alertera false et true en fonction de la disponibilité, il ne renvoie simplement false/true s'il est appelé depuis submitHandler.

Toute idée appréciée.

+0

je pense que la méthode obtient avant qu'il retourne complets une valeur car il est appel asyncronous, je suis sûr à 90% sur ce ... – kobe

Répondre

1

Novon,

Vous pouvez définir une variable dans un succès de ajax, mais à ma connaissance vous ne pouvez pas retourner une valeur de la ajax.

est un appel asynchrone, alors maintenez une variable globale déplacez votre logique de vérification à la succuess.

Vous ne pouvez pas faire un appel ajax et obtenir la valeur de retour comme une méthode

+0

merci, je vais essayer. – novon

0

Impressionnant, travaille maintenant avec:

$.validator.addMethod("usercheck", function(value, element) { 
     ajaxCheck(); 
     return validName; 
}, "Username not available!"); 

et définissant une variable « validName » au lieu de retourner vrai/faux dans ajaxCheck()

+0

comment ça marche même? validName n'est défini nulle part – neelmeg

2

Vous pouvez également utiliser l'option à distance, comme ceci!

remote: { 
    url: myUrl = location.protocol + "//" + location.host + '/trabajos/json.php?c=wrk&a=validMail', 
    type: "post", 
    data: { 
     correo: function() { 
       return $("#subtrabajo_correo").val(); 
      } 
     } 
}