2013-03-18 72 views
2

所以我试图从JSON分配数据到一个全局变量多次使用它,但我得到这个问题。第一个警报通过确定,但对于第二个我不能读取未定义的propery 4。JQuery阅读JSON(全局/本地变量)

var refference=[] 
    $.getJSON('letters.json', function(data) { 
       refference=data.letters 
       alert(refference[1][4]) 
     }) 
    alert(refference[1][4]) 

谢谢!

+2

你不能。 Ajax是异步的,外部的警报将在Ajax完成之前发生。 http://learn.jquery.com/ajax/key-concepts/ *“A是为异步”* – 2013-03-18 21:59:57

回答

5

第二个alert(refference[1][4])会给你一个错误,因为在那个时间点,$.getJSON()请求还没有返回。所以refference对象仍然是[],因此属性4是未定义的。

1

正如Kevin B所说,警报在ajax调用完成之前就会触发。您必须将第二个警报(或任何其他函数)放入ajax请求的成功回调中,以确保它在数据完全加载后触发。

类似:

$.getJSON('letters.json', function(data) { 
       refference=data.letters; 
       alert(refference[1][4]); 
     }).success(function(){ 
        alert(refference[1][4]); 
        }); 

Here's a working jsFiddle example using a JSON webservice

+0

请注意,你的.done()部分是无效的,仍然会提醒undefined或抛出错误 – 2013-03-18 22:04:37

+0

是的,我的坏。应该使用''成功'。将更新我的答案,并包括一个工作jsFiddle – Jack 2013-03-18 22:31:20

+0

不,成功贬值。 .done()是正确的,但.done(alert(...))是错误的,.success也是如此({...}) – 2013-03-18 22:55:16