jQuery.get()变量范围

我正在使用jQuery的Ajax,但在我的情况下,我需要将响应存储在全局变量中:

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 

但是当我尝试访问$ .get()范围之外的变量点时,我只得到一个未定义的对象。 但是我在$ .get()中得到了正确的对象。

在这种情况下,管理上下文和范围的最佳方式/标准是什么?

您的范围很好,但$.get()以异步方式运行。 它启动呼叫然后立即执行第二个警报。 当$.get()完成时,它执行function(data){} 。 无论你打算用什么,你都需要在那里做。 如果你在所有这些结束后去firebug控制台,你应该发现alert(points[22].someid.toString())有你所期望的。


您可以禁用代码中的元素以阻止进一步的用户操作:

 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'); });