所以我正在创建一个简单的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"
有什么想法吗?
答案 0 :(得分:4)
有几个问题:
dat
是init
函数中的局部变量,因此load
函数中的代码自然无法访问它。
您致电 init
,然后将其返回值传递给on
,而不是将init
挂钩为{{1}处理程序。
load
异步,因此只需致电$.get
,然后致电load
即可开始工作,fill
将会在GET完成之前运行。
见评论:
fill
其他一些说明:
您也可以查看承诺。
除非$(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
}