Comment stocker réponse JSON en jQuery?
Je tiens à conserver ma réponse json dans une variable globale, donc, je pourrais utiliser dans mon application sans faire un getJSON demande plus d'une fois.
var data;
$.getJSON("panorama.json",function(json){
data = json.images[0].src;
console.log(data);
});
console.log(data);
Si je me connecte dans la demande réelle de son bien, mais j'obtiens un "undefined" partout ailleurs.
Aucun commentaire appriciated.
Modifier [copié à partir d'observations]: Essayé ...
$.myglobals = { result: "unset" }
$(document).ready(function() {
$.getJSON( "panorama.json", function(json) {
$.myglobals.result = json.images[0].src;
console.log($.myglobals.result);
});
console.log($.myglobals.result);
}) ;
Le premier journal est bon, le deuxième n'est pas défini.
Modifier [copié à partir de la réponse]:
en fait à la fois la méthode travaillé
la chose intéressante est que mon
la demande a été dans une fonction, et j'ai essayé
pour accéder à ma variable globale droite
après la demande, dans la même fonctionquand j'accessible à l'extérieur de la fonction
il a travaillé comme un charme
vous avez peut-être raison à propos de la mise à jour, mais exactement comment pourrais-je savoir si mon global var a été mise à jour? ou où vais-je mettre ma demande, de sorte que mon global var est mis à jour avant que je l'utilise, la seule chose que je peux penser à est écrit tout dans la demande de rappel mais ça a l'air idiot 🙂
OriginalL'auteur soda01 | 2009-06-19
Vous devez vous connecter pour publier un commentaire.
Si votre code est structuré comme ça, alors vous avez un problème avec le fait d'essayer d'accéder à des données qui n'ont pas été mis en encore. Juste parce que votre
$.getJSON()
est au-dessus deconsole.log()
ne signifie pas que vous obtenez la réponse avant de vous connecter valeur de données.Si votre problème n'est pas portée, mais plutôt le moment: introduire un certain côté serveur lag et votre solution peut ainsi bloquer.
Peut-être que vous devriez mettre quelques option si la réponse a été reçue:
la convention sur StackOverflow est de mettre à jour votre question de départ, plutôt que de poster une réponse.
je vais garder cela à l'esprit, merci
ouais j'ai pensé que c'est un problème de synchronisation par la suite. juste mis en œuvre à l'aide d'un drapeau et d'un setInterval sur la vérification, et il fonctionne ok
OriginalL'auteur Damir Zekić
Vous pouvez insérer dans un attribut dans les DOM (comme un #ID) et de les récupérer au besoin.
OriginalL'auteur jjclarkson
Ici est une approche qui permet de définir la variable dans un $(document).prêt() et de l'utiliser dans un autre $(document).ready().
myglobals
est un espace de noms de l'objet qui sans doute réduit les chances de votre variable globale en collision avec quelqu'un d'autre, surtout si vous nom il quelque chose de plus intelligent que de "myglobals."Transitoire lien pour le code ci-dessus dans jsbin.
désolé pour la non stylé commentaire je suis un peu nouveau ici
J'ai copié le code source dans votre commentaire à votre question, de sorte qu'il sera de format bien.
OriginalL'auteur Thomas L Holaday
$.getJSON déclenche une requête ajax (le mot-clé dans le champ de la question étant asynchrone).Votre variable n'est pas définie, car il n'a pas été de définir encore, la réponse n'a pas fini. Autres personnes suggéré de passer votre console.journal plus loin dans votre code, mais il n'y a aucune garantie qu'il sera utilisable à moins que votre logique est synchronisé avec une fonction de rappel. $.getJSON accepte une fonction de rappel que l'un de ses paramètres.
OriginalL'auteur lawrence_baker