Valeur de retour pour la fonction contenant la fonction jQuery $ .post ()

Je comprends que AJAX est asynchrone, et tout cela. Mais j'ai le code suivant:

function doesUsernameExist(element) { // Check via AJAX (POST) if username already exists in the database var funcReturned = null; $.post( '_ajax_checkexist.php', { var: 'username', value: element.value }, function(data) { funcReturned = (data.toLowerCase() == 'exists'); }, 'data' ); return funcReturned; } 

Je comprends pourquoi la fonction ne renvoie pas correctement une valeur, mais que puis-je utiliser comme solution de contournement? Ceci est pour le plugin Validity, qui nécessite un booléen renvoyé par la fonction UsUserUserExist . Je ne peux pas faire la solution habituelle d'avoir la fonction $ .post modifier certains éléments HTML. Il doit renvoyer true / false à doesUsernameExist .

Quel genre de solution de rechange puis-je utiliser? Je suis stupéfait par cela.

Si cela est à des fins de validation, vous constaterez que le plugin jquery.validate et sa remote rule sont parfaitement adaptés à ce que vous essayez d'atteindre.

Ainsi, au lieu d'écrire des fonctions doesUsernameExist et de s'inquiéter de l' asynchrone de AJAX et de la manière de renvoyer des valeurs, vous écrirez des règles de validation pour votre formulaire (qui est en fait le but final de l'exercice => se concentrer sur l'entreprise et laisser la plomberie aux plugins) :

 $('#id_of_some_form').validate({ rules: { password: { required: true }, username: { remote: '_ajax_checkexist.php' } } }); 

Vous pouvez renvoyer une valeur si l'appel est synchrone. Ici, vous avez un exemple:

Solution pour le mode synchrone:

 function doesUsernameExist(element) { // Check via AJAX (POST) if username already exists in the database var funcReturned = null; $.ajaxSetup({async: false}); $.post( '_ajax_checkexist.php', { var: 'username', value: element.value }, function(data) { funcReturned = (data.toLowerCase() == 'exists'); }, 'data' ); $.ajaxSetup({async: true}); return funcReturned; } 

Le problème avec votre code est que, pendant que l' $.post s'exécute, la fonction continue son exécution (c'est-à-dire asynchrone), alors la valeur sera null avant que votre $.post terminé.

Solution pour mode asynchrone:
À l'aide d'un appel asynchrone, vous ne pouvez pas renvoyer une valeur, mais peut appeler des rappels ou exécuter du code juste là-bas. Cela pourrait être une solution asynchrone:

 function doesUsernameExist(element) { var funcReturned = null; $.post( //This post is asynchronous '_ajax_checkexist.php', { var: 'username', value: element.value }, function(data) { funcReturned = (data.toLowerCase() == 'exists'); userExistanceCallback(funcReturned); }, 'data' ); //We don't return anything } function userExistanceCallback(funcReturned){ if(funcReturned == true) alert("User exists!!"); else alert("User does not exist!!"); } 

J'espère que cela t'aides. À votre santé