Retour d’une fonction nestede en javascript

J’essaie de créer une fonction qui utilise la fonction ajax de jquery pour obtenir des informations à partir de mon fichier ajax.php.

code:

function ajaxIt(dataLine){ $.ajax({ type: "POST", url: "ajax.php", data: "ajax=true&"+dataLine, success: function(msg){ console.log("[AjaxIt]: "+dataLine+" returned "+msg); return msg; } }); } if(ajaxIt("action=loggedIn")=="1"){ console.log("Logged In"); loggedIn=true; initiate2(); } 

Le problème est que je ne parviens pas à faire revenir la fonction success à la fonction ajaxIt. Quelqu’un pourrait-il m’expliquer comment je pourrais faire quelque chose comme ça?

Merci.

Vous devez appeler une fonction de callback pour traiter les données de cette manière:

 function ajaxIt(dataLine, cb){ $.ajax({ type: "POST", url: "ajax.php", data: "ajax=true&"+dataLine, success: function(msg){ if($.isFunction(cb)) cb.apply(null, [msg]); } }); } ajaxIt("action=loggedIn", function(data){ if(data === "1"){ console.log("Logged In"); loggedIn=true; initiate2(); } }); 

$.ajax est asynchrone. Cela signifie qu’il reviendra immédiatement au lieu d’attendre l’exécution de la requête AJAX et de récupérer un résultat du serveur. Au moment où le message du serveur arrive, votre fonction ajaxIt a déjà fini de fonctionner.

Ce que vous devriez utiliser ici est un style de continuation-passant. Fournit à ajaxIt une suite : une fonction qui explique ce qui doit être fait une fois que ajaxIt a fini de fonctionner.

 function ajaxIt(data, continuation) { data.ajax = true; $.post("ajax;php", data, function(msg) { console.log("[AjaxIt]: returned "+msg); continuation(msg); }); } ajaxIt({action:"logged-in"}, function(result) { if (result == "1") { console.log("Logged In"); loggedIn=true; initiate2(); } });