52 votes

charge variable json

Je dois faire quelque chose de très simple, mais il ne semble pas être un moyen facile de faire cela, autant que je puis dire. Je veux juste charger des données JSON à partir d'une source à distance et de le stocker dans une variable Javascript à l'aide de jQuery. Voici ce que j'ai:

var my_json;
$.getJSON(my_url, function(json) {
  var my_json = json;
});

Le my_json variable n'est pas définie. Je pense que c'est clairement un problème de portée. Il me semble l' $.getJSON méthode doit renvoyer du JSON, mais elle renvoie un objet XMLHttpRequest. Si je fais ceci:

request = $.getJSON(my_url);
my_json = request.responseText.evalJSON();

Cela ne fonctionne pas car, jusqu'à la readystate == 4, le responsetext reste nulle. Il semble que vous devez utiliser la fonction de rappel pour revenir responsetext, car il se déclenche à la réussite.

Il ne peut pas être ce dur! Droit?

131voto

karim79 Points 178055

Cela fera:

var json = (function () {
    var json = null;
    $.ajax({
        'async': false,
        'global': false,
        'url': my_url,
        'dataType': "json",
        'success': function (data) {
            json = data;
        }
    });
    return json;
})(); 

Le principal problème étant qu' $.getJSON sera exécutée de manière asynchrone, donc l'option Javascript de votre volonté de passer de l'expression qui l'invoque avant même sa success rappel des feux, donc il n'y a aucune garantie que votre variable permettra de saisir toutes les données.

Noter en particulier l' 'async': false option ci-dessus appel ajax. Le manuel dit:

Par défaut, toutes les demandes sont envoyées asynchrone (c'est à true par défaut). Si vous avez besoin d'synchrone les demandes, définissez cette option à false. Notez que les requêtes synchrones peuvent verrouiller temporairement le navigateur, la désactivation de toutes les actions de la la demande est active.

29voto

CountZero Points 652

code bit devrait lire:

var my_json;
$.getJSON(my_url, function(json) {
  my_json = json;
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X