La vérification jQuery renvoie undefined

Mon expérience dans jQuery est limitée et j’ai cherché une réponse, mais je n’arrive pas à la trouver.

Cette fonction retourne une valeur false ou true basée sur un get. Maintenant, mon problème est que la fonction ‘Disponibilité’ ne renvoie pas de faux ni de vrai si je récupère mes données.

Ceci est le code.

function Availability(){ var email = jQuery('#emailRegister').val(); jQuery.get("test.php", {email: email}) .done(function(data) { if(data == 'true'){ jQuery(".warningEmailDuplicate").hide(); return true; }else if(data == 'false'){ jQuery(".warningEmailDuplicate").show(); return false; } }); } 

jQuery.get crée une requête AJAX. Ce sont asynchrones. Vous ne pouvez pas return une valeur du rappel AJAX à la fonction appelante. La fonction sera sortie sans rien retourner avant la fin de la requête HTTP.

Vous devez réécrire votre code pour utiliser les rappels:

 function Availability(){ var email = jQuery('#emailRegister').val(); jQuery.get("test.php", {email: email}) .done(function(data) { if(data == 'true'){ jQuery(".warningEmailDuplicate").hide(); AvailabilityResult(true); }else if(data == 'false'){ jQuery(".warningEmailDuplicate").show(); AvailabilityResult(false); } }); } function AvailabilityResult(available) { // *available* will be true or false // do with this value what you wanted to do with the return value from Availability } 

JQuery est un langage de script Async. Par conséquent, lorsque vous appelez cette méthode, le compilateur n’attend pas pour obtenir la valeur de retour.

Lorsque vous appelez Availablity (); puis une demande Ajax get hors cours est envoyée à test.php et entre-temps, le compilateur ne renvoie rien de votre méthode et assign variable semble indéfini.

Pour éviter ce problème, vous devez créer une fonction de rappel plutôt que de simplement renvoyer la valeur. voir exemple sans rappel et exemple avec rappel

Essayez ce code:

 function Availability(callback){ var email = jQuery('#emailRegister').val(); jQuery.get("test.php", {email: email}) .done(function(data) { if(data == 'true'){ jQuery(".warningEmailDuplicate").hide(); callback(true); }else if(data == 'false'){ jQuery(".warningEmailDuplicate").show(); callback(false); } }); } //calling function Availablity(function(status){ var available = status; alert(available); });