【问题标题】:Variable scope: Global variable inside function变量范围:函数内部的全局变量
【发布时间】:2012-12-18 04:44:46
【问题描述】:

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

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

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

timeline.draw (items,options);

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

【问题讨论】:

    标签: javascript json


    【解决方案1】:

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

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

    上面的例子实际上是警告1 然后3 然后2。注意32 之前。

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2013-07-13
        • 2016-11-13
        • 2017-03-05
        • 2015-03-22
        • 1970-01-01
        • 2022-08-02
        • 2012-11-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多