JavaScript变量不存在

时间:2018-04-08 13:25:19

标签: javascript json

所以我正在创建一个简单的Web页面,它从json文件中获取数据并附加一些段落,这些段落等于json文件数组中的对象数量:

$(function () {

    function init() {
       console.log("OK");
       var dat;
       var i;
       load();
       fill();
   }

   function load()
   {
       $.get("data.json", function (data, status) {
           dat=data;
           console.log(dat);
       })
   }

   function fill()
   {
       console.log(dat);
       for(i=0; i<dat.length(); i++) $("#container").append("<p>Testing</p> <br/><br/>")
   }

    $(".front").on("load", init());
});

然而,当我第一次尝试执行控制台日志时运行网页时,它会打印出数据,但第二次,在fill()函数内打印出来:

"Uncaught ReferenceError: dat is not defined"

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

有几个问题:

  1. datinit函数中的局部变量,因此load函数中的代码自然无法访问它。

    < / LI>
  2. 致电 init,然后将其返回值传递给on,而不是将init挂钩为{{1}处理程序。

  3. load 异步,因此只需致电$.get,然后致电load即可开始工作,fill将会在GET完成之前运行。

  4. 见评论:

    fill

    其他一些说明:

    1. 您也可以查看承诺。

    2. 除非$(function () { var dat; // *** Make this global to the code (it's not actually global, which is good) function init() { load(fill); // *** Pass `fill` into `load` } function load(next) // *** Accept the callback to call when ready { $.get("data.json", function (data, status) { dat = data; console.log(dat); next(); // *** Call it }) } function fill() { console.log(dat); for(i=0; i<dat.length(); i++) $("#container").append("<p>Testing</p> <br/><br/>") } $(".front").on("load", init); // *** No () on init, you want to pass the function into `on`, not *call* the function }); 超过dat,否则请考虑根本没有fill变量;只需将dat调用load并将数据作为参数。

答案 1 :(得分:0)

变量dat在函数init()的范围内,并且它不存在于该函数之外,将变量dat移动到函数之外。

var dat;

function init(){

// rest of code

}