我正在尝试将JSON数组分配给变量,如下所示:
$.getJSON("tljson.json",function(result){
items = JSON.stringify(result);
});
然后在函数外调用该变量:
timeline.draw (items,options);
在getJSON函数中使用alert(items),但是,在函数之外,它只返回'undefined'。我认为这会有效,因为我在getJSON函数中将item声明为全局变量。我做错了什么?
答案 0 :(得分:2)
您可能不等待getJSON
功能完成。它是异步,这意味着它下面的代码将在回调函数中的代码之前执行。
alert(1);
$.getJSON("tljson.json",function(result){
alert(2);
items = JSON.stringify(result);
});
alert(3);
上面的示例实际警告1
然后3
然后2
。请注意,3
位于2
之前。
为了修复代码,您需要等到调用回调函数,以便在尝试使用该变量之前将值赋给items
。提出一个解决方案可能取决于你的情况,但一个简单的想法是从你的回调中调用一些函数。
$.getJSON("tljson.json",function(result){
items = JSON.stringify(result);
doSomethingWithItems();
});
function doSomethingWithItems() {
alert(items); // Correctly alerts items.
}
答案 1 :(得分:1)
这是因为您的代码在收到getJSON的响应之前正在执行。使用它像:
function afterGetJSON(items) {
timeline.draw (items,options);
}
$.getJSON("tljson.json",function(result){
items = JSON.stringify(result);
afterGetJSON(items);
});