未定义数组值

时间:2013-08-27 08:05:37

标签: javascript webgl

我想从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

我该如何解决这个问题?

4 个答案:

答案 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