我想从json文件中读取并使用其值绘制三角形。虽然在常规中我可以打印出价值,但在它之外,它将不再起作用。我的代码:
faces=new Array(40000);
$.getJSON('file.json', function(data) {
$.each(data.faces, function(i, f) {
faces[i]=new Array(3);
faces[i][1]=data.faces[i].f1;
faces[i][2]=data.faces[i].f2;
faces[i][3]=data.faces[i].f3;
//alert(faces[1][1]); works here
});
});
//alert(faces[1][1]); doesn't work here, console says faces[1][1] is undefined
我该如何解决这个问题?
答案 0 :(得分:2)
对$.getJSON
的调用是异步的,您只需在回调中填充faces
数组,就像您已经注意到的那样。
你能做的是:
faces=new Array(40000);
$.getJSON('file.json', function(data) {
$.each(data.faces, function(i, f) {
faces[i]=new Array(3);
faces[i][1]=data.faces[i].f1;
faces[i][2]=data.faces[i].f2;
faces[i][3]=data.faces[i].f3;
//alert(faces[1][1]); works here
});
someFunction();
});
someFunction() {
alert(faces[1][1]);
}
希望它有所帮助。
答案 1 :(得分:0)
这是因为getJSON是异步的。
尝试使用jquery ajax方法定义异步属性。
$.ajax({
type: "GET",
url: remote_url,
async: false,
success : function(data) {
remote = data;
}
});
答案 2 :(得分:0)
由于{{1}的异步性,在第二种情况下,实际获得JSON的调用所花费的时间超过了在“成功”/“完成”回调之外达到使用点所需的时间。因此,在函数返回之前,值(s)自然是未定义的,因此是“成功”/“完成”函数。
答案 3 :(得分:-1)
简单的改变,
faces=new Array(40000);
$.getJSON('file.json', function(data) {
$.each(data.faces, function(i, f) {
faces[i]=new Array(3);
faces[i][1]=f.f1;
faces[i][2]=f.f2;
faces[i][3]=f.f3;
});
});
在$ .each
中使用f而不是data.faces