J'ai un problème de retour d'une variable dans ma fonction, le script ci-dessous fonctionne bien: pari lorsque j'essaie ce qui suit, je reçois une boîte de message avec le message "non défini": function sessionStatus(){
$(document).ready(function(){
$.getJSON(scriptRoot+"sessionStatus.php",function(status){
return status;
});
});
}
alert(sessionStatus());
7 Réponses :
Votre fonction Toute la fonction est définie pour que l'appel AJAX se produise une fois que la page se charge - rien ne se passe effectivement dans em> Le code dans Vous devez lire sur ce que sessionStatus () code> ne renvoie rien, d'où l'alerte dit non défini code>. p>.
sessionStatus () code> qui pourrait être retourné. p>
fonction (Status) {...} code> ne passe pas avant que l'appel Ajax sur le serveur renvoie une valeur et que l'appel AJAX ne soit pas envoyé avant la page. charges. p>
$. getjson () code> et $ (document) .Ready () code> fait réellement, car vous allez continuer à obtenir comportement déroutant jusqu'à ce que vous les compreniez correctement. p>
Alors qu'est-ce que "statut de retour"; faire alors? Désolé mais cela me confond encore plus.
C'est le statut de retour, mais c'est à l'intérieur d'une fonction anonyme appelée par .getjson lorsque la requête HTTP est terminée. Ce n'est pas un statut de retour dans le cadre de SessionStatus ();
@Stanni: Le statut de retour renvoie une valeur à l'appelant de votre rappel JSON, qui est JQuery lui-même. JQuery va simplement le jeter. Votre code n'est pas une fonction; C'est une fonction dont la définition est imbriquée dans une fonction, elle-même imbriquée dans une autre fonction. Ces trois fonctions sont toutes appelées à des moments différents, en réponse à différents événements.
Votre fonction SessionStatus () ne renvoie jamais rien. Il définit une fonction à exécuter plus tard et cette fonction em> renvoie quelque chose, mais ce n'est pas rien à voir avec SessionStatus () P>
Vous retournez une valeur lorsque le document prêt est effectué. Où est votre valeur supposée aller? L'objet JQuery ne sait pas quoi faire avec ça. p>
La fonction SessionStatus définit simplement l'auditeur d'événement pour $ (document) .Readady () puis retourne sans retourner une valeur. C'est le non défini que vous voyez. P>
Plus tard lorsque $ (document) .Ready () incendie, il appelle l'AJAX qui, si cela réussit à retourner le statut, mais rien ne reçoit cet état. P>
function sessionStatusCallback(status)
{
alert(status);
}
function sessionStatus(){
$(document).ready(function(){
$.getJSON(scriptRoot+"sessionStatus.php",function(status){
sessionStatusCallback(status);
});
});
}
sessionStatus();
Your function is being called asynchronously -- actually after two asynchronous calls, made via .ready() and .getJSON(). In such a case there is no available return value, instead you have to use a callback, as in the above, to process the response.Though I should note that the function passed to getJSON in the above already is a callback. You could change that function definition to just be "sessionStatusCallback" and it would call the above callback once the JSON was ready, and you could continue to process there. Or...continue your processing in the current callback (it's a matter of style whether to use a function reference or declare the anonymous function right there in the .getJSON() call)
Les fonctions ne doivent jamais être incluses dans une fonction jQuery (document) .ReadAry. Séparez-les, de sorte que vous n'avez pas d'effets secondaires que vous ne voulez pas avoir. Comment voulez-vous appeler le statut de session? Et la fonction de sorcière doit obtenir la valeur de retour? P>
Il y a deux choses que vous devriez savoir:
1: La chose JSON est asynchrone, l'appel de la fonction à SessionStatus pourrait déjà être effectué lorsque le JSON est toujours récupéré. Ce qui suit fonctionnerait: p> ou plutôt: p> 2: même quand il serait synchrone, vous êtes seulement Donner une valeur de retour de la fonction interne, la SessionStatus ne reviendrait donc rien. Consultez ce code (non lié à votre chose JSON): p> ou: p> Cela explique un peu. p> p>