变量范围:函数内的全局变量

时间:2012-12-18 04:44:47

标签: javascript json

我正在尝试将JSON数组分配给变量,如下所示:

$.getJSON("tljson.json",function(result){
  items = JSON.stringify(result);
});

然后在函数外调用该变量:

timeline.draw (items,options);

在getJSON函数中使用alert(items),但是,在函数之外,它只返回'undefined'。我认为这会有效,因为我在getJSON函数中将item声明为全局变量。我做错了什么?

2 个答案:

答案 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);

  });