Je suis sûr que vous connaissez ce problème, j'essaie toujours de le résoudre pendant quelques jours. J'ai essayé beaucoup de choses, mais personne n'a fonctionné:
Voici le code p> alerte (résultat); code> montrera 1 code> mais lors de l'utilisation d'une autre fonction, il est indiqué non défini code>. P> p>
5 Réponses :
Le problème ici est que AJAX est asynchrone (c'est ce que le premier A signifie). Cela signifie que la fonction retourne immédiatement; Le gestionnaire Si vous avez un code qui doit fonctionner après avoir reçu les données, il doit être placé dans le gestionnaire code> code> ou SUCCESS CODE> n'est appelé que lorsque la demande est réussie. Cela signifie que code> lobbobleader code> retourne immédiatement après votre demande, alors ne renvoie rien. P>
Vous ne pouvez pas retour code> à partir d'une fonction asynchrone comme celle-ci, vous revenez à partir de cette fonction succès code> Callback, pas la fonction mère. Au lieu de cela, lancez tout ce dont vous avez besoin dans le rappel, comme celui-ci: function lobbyLeader() {
$.ajax({
data: {"id": 1, "request": "lobbyinfo", "method": "read"},
url: 'api.php',
dataType: 'json',
success: function(data){
someOtherFunc(data.leader);
}
});
}
J'ai fusionné les deux fonctions: Pastebin.com/Runigzsd Pouvez-vous me dire comment réellement le réparer?
@Nightbox - au lieu de si (fonction (données.leader) { code> vous avez besoin si (data.leader) { code>
@Nnighbox - Est-ce ce que vous êtes après? jsfiddle.net/nick_craver/qlalj
HMM Il existe 2 appels AJAX différents, devrais-je les combiner dans PHP en un seul et obtenir ces données?
@Nnighbox - Yup, c'est ce que je ferais, il suffit d'avoir 2 propriétés sur le JSON retourné, beaucoup plus simple :)
yep, en permanence était mieux ty
Existe-t-il une solution qui n'implique pas à faire fonctionner une fonction distincte? Parce que la création d'une autre fonction signifie que vous ne pouvez pas avoir une fonction polyvalente pour les demandes AJAX
Lorsque vous Le seul moyen de connecter une valeur de retour possible de la fonction de rappel passée à Retour CODE> Valeurs de l'intérieur d'une fonction anonyme exécutée de manière asynchrone, ces valeurs ne dépendent pas de la chaîne d'étendue, l'instruction code> retour code> est uniquement appliquée sur le courant. Portée de la fonction, pas la portée environnante, $. Ajax () code> est asynchrone, donc immédiatement après avoir exécuté la déclaration, la fonction externe retourne, il n'y a donc pas de valeur de retour de la fonction extérieure, c'est pourquoi vous " revenir au non défini code>. p>
$. Ajax code> est d'appeler une autre fonction extérieure, passant dans les données souhaitées. P>
Je recommande de cette façon.
Exemple: p> Vous pouvez tester la méthode suivante. p> (dans l'autre fichier (HTML ou JS)) var gridData = makeJQGridDataFromList(openAPIUrl);
console.debug(">> " + JSON.stringify(gridData));
correctement indiqué que vous ne pouvez pas vraiment revenir du succès, cependant, si vous faites ce que vous pensez que vous faites, et c'est à saisir les données et à le renvoyer et à l'attribuer à quelque chose dans une autre zone, c'est-à-dire
var obj = lobbobleader (); p>
alors vous pouvez simplement définir la fonction ASYNC: Faux et renvoyez l'OBJ en dehors du succès après la fin du code. Exemple P>
function lobbyLeader() {
var obj;
$.ajax({
async:false;
data: {"id": 1, "request": "lobbyinfo", "method": "read"},
url: 'api.php',
dataType: 'json',
success: function(data){
obj= JSON.parse(data);
}
});
return obj;
}
"Aussi de JQuery 1.8 [Il y a trois ans!] L'utilisation de Async: Faux avec JQXHR ($ .DOne () ou le JQXHR.SUCCESSÉ (). " API.JQUERY.com/JQUERY.AJAX Les promesses ne sont pas si difficiles à apprendre, c'est vaut la peine. Certes, une amélioration sur le blocage de votre UI entière jusqu'à ce que la demande soit terminée.
Je suis confronté au même problème. Vous avez sauvé ma journée @matt. De plus, je n'ai pas défini la fonction sur async: false code> et obtenu la sortie correcte.
Qu'entendez-vous par «lors de l'utilisation d'une autre fonction»?
Faites-vous une alerte
(lobbobleader ()); code> et récupéreznon défini code>?"Êtes-vous alerte (lobbobleader ()); et revenir indéfini?" Oui
"Que voulez-vous dire par" lors de l'utilisation d'une autre fonction "?" Comme ceci: si (lobbobleader () == 1) {
Dupliqué possible de Comment retourner la réponse d'un appel Ajax? < / a>