Vous ne pouvez pas retourner quelque chose à partir d'une fonction qui est asynchrone. Ce que vous pouvez revenir est une promesse. J'ai expliqué comment les promesses de travail en jQuery dans mes réponses à ces questions:
Si vous pouviez expliquer pourquoi voulez-vous retourner les données et ce que vous voulez faire avec elle plus tard, alors je pourrais être en mesure de vous donner plus de réponse précise comment le faire.
En général, au lieu de:
function testAjax() {
$.ajax({
url: "getvalue.php",
success: function(data) {
return data;
}
});
}
vous pouvez écrire votre testAjax fonction comme ceci:
function testAjax() {
return $.ajax({
url: "getvalue.php"
});
}
Ensuite, vous pouvez obtenir votre promesse comme ceci:
var promise = testAjax();
Vous pouvez stocker votre promesse, vous pouvez la passer autour de vous, vous pouvez l'utiliser comme un argument dans les appels de fonction et vous pouvez le retourner à partir de fonctions, mais enfin, lorsque vous voulez utiliser vos données retourné par l'appel AJAX, vous devez le faire comme ceci:
promise.success(function (data) {
alert(data);
});
Si vos données sont disponibles à ce point, alors cette fonction sera appelé immédiatement. Si ce n'est pas le cas, alors elle sera invoquée dès que les données sont disponibles.
Le point de l'ensemble de tout cela est que vos données ne sont pas disponibles immédiatement après l'appel de $.ajax, car il est asynchrone. Promesses est une belle abstraction pour les fonctions de dire: je ne peux pas vous renvoyer les données, parce que je ne l'ai pas encore et je ne veux pas bloquer et vous faire patienter voici donc une promesse à sa place, et vous serez capable de l'utiliser plus tard, ou simplement donner à quelqu'un d'autre et être fait avec elle.
Voir cette DÉMO.
Mise à JOUR
Actuellement jQuery Promesses ne sont pas compatibles avec les Promesses/A+ spécification qui signifie qu'ils ne peuvent pas coopérer très bien avec d'autres Promesses/A+ conforme implémentations.
Pour plus d'infos, voir: