jQuery.get () Variables Portée

Je travaille avec Ajax de jQuery, mais dans mon cas, je dois stocker la réponse dans des variables globales:

var points = Array() $.get("/data", {"id": 1}, function(data) { for (var i=0; i < data.length; i++) { points[data[i].someid] = data[i]; } alert(points[22].someid.toString()); // it works fine }); alert(points[22].someid.toString()); // undefined 

Cependant, lorsque j’essaie d’accéder aux points de variable en dehors de la scope de $ .get (), je viens d’obtenir un object non défini. Mais j’obtiens le bon object dans $ .get ().

Quel est le meilleur moyen / standard de gérer le contexte et la scope dans ce cas?

Votre scope est $.get() , mais $.get() s’exécute de manière asynchrone. Il commence l’appel puis exécute immédiatement la deuxième alerte. Lorsque $.get() terminé, il exécute la function(data){} . Quoi que vous alliez utiliser en dehors de cela, vous devez le faire ici. Si vous allez à la console firebug après tout cela, vous devriez trouver cette alert(points[22].someid.toSsortingng()) a ce que vous attendez.


Vous pouvez désactiver des éléments dans votre code pour décourager toute autre action de l’utilisateur:

 var points = Array(); // prevent further user action $('#actionButton').attr('disabled', true); // optionally show a loading.gif to let them know the browser is busy $.get("/data", {"id": 1}, function(data) { for (var i=0; i < data.length; i++) { points[data[i].someid] = data[i]; } alert(points[22].someid.toString()); // it works fine // process points data // hide loading.gif // re-enable user action $('#actionButton').removeAttr('disabled'); });