0

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

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

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

timeline.draw (items,options);

在 getJSON 函数内部使用 alert (items) 是可行的,但是,在函数外部,它只返回“未定义”。我认为这会起作用,因为我在 getJSON 函数中将项目声明为全局变量。我究竟做错了什么?

4

2 回答 2

2

您可能没有等待getJSON功能完成。它是异步的,这意味着它下面的代码将在回调函数中的代码之前执行。

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

上面的例子实际上是then警报1then 。请注意,在之前。3232

为了修复您的代码,您需要等到回调函数被调用,以便它可以items在您尝试使用该变量之前为其分配一个值。提出解决方案可能取决于您的情况,但一个简单的想法是从回调中调用某个函数。

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

function doSomethingWithItems() {
  alert(items); // Correctly alerts items.
}
于 2012-12-18T04:47:18.887 回答
1

这是因为您的代码在收到来自 getJSON 的响应之前正在执行。像这样使用它:

  function afterGetJSON(items) {
    timeline.draw (items,options);
  }

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

  });
于 2012-12-18T04:47:06.957 回答