如何将通过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]);
});
})
答案 0 :(得分:19)
您的问题是,$.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<data.length;i++){
haikus[i]=[data[i].id,String(data[i].username),String(data[i].haiku)];
}
// The data in haikus is available here becuase
// this alert() doesn't run until the response is received.
alert(haikus[0][1]);
});
// Here the data in haikus is NOT available because this line
// of code will run ***before*** the response from the AJAX
// request from above is received.
// In other words, this alert() executes **immediately** without
// waiting for the $.getJSON() to receive its response.
alert(haikus[0][1]);
});
答案 1 :(得分:0)
我相信如果你使用'var haikus = something'来定义一个变量,那么变量是本地范围的,如果你使用'haikus = something'来定义变量,那么它就是全局范围的。