将jQuery getJSON中的数据分配给数组

如何将通过getJSON()获取的数据分配给一个数组,供以后使用?

下面的getJSON url检索具有10个主要元素的格式正确的JSON,每个元素都包含id,username,haiku(和其他)的子元素。 如果您正在运行它,请尝试将JSON元素保存到本地文件,这样您就不会得到相同的域错误(即,如果您从其他域获取,则不会加载JSON)。

会发生什么是警报将获取getJSON回调中的值,但在外部,该值是未定义的。

$(document).ready(function(){ var haikus=[]; alert("begin loop"); $.getJSON('http://example.com/json.php',function(data){ var i=0; for(i=0;i<data.length;i++){ haikus[i]=[data[i].id,String(data[i].username),String(data[i].haiku)]; } alert(haikus[0][1]); }); })
$(document).ready(function(){ var haikus=[]; alert("begin loop"); $.getJSON('http://example.com/json.php',function(data){ var i=0; for(i=0;i<data.length;i++){ haikus[i]=[data[i].id,String(data[i].username),String(data[i].haiku)]; } alert(haikus[0][1]); }); }) 
  • 是的,这与之前的post有关。 但是,我最初简化了我的问题,所以提供的初始解决方案并没有解决它。 jQuery – getJSON数据到数组

您的问题是$.getJSON请求之外 (及之后)的任何代码收到$.getJSON响应时已经运行。

请记住,AJAX调用是异步的。 这意味着AJAX请求之后的代码不会等待响应执行 。 所以它在有任何回应之前很久就会运行。

关键是任何依赖于异步AJAX请求响应的代码都必须在回调中运行(或从中调用)。


编辑:

为了澄清,在下面的代码示例中,请参阅代码注释。 它应该有助于解释这个问题。

 $(document).ready(function(){ var haikus=[]; alert("begin loop"); $.getJSON('http://haikuennui.com/random.php',function(data){ var i=0; for(i=0;i 

我相信如果你通过使用’var haikus = something’来定义一个变量,那么变量是本地范围的,如果你通过使用’haikus = something’来定义变量,那么它就是全局范围的。