0

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

4 回答 4

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]);
}

希望能帮助到你。

于 2013-08-27T08:09:42.927 回答
0

这是因为 getJSON 是异步的。

尝试使用定义了 async 属性的 jquery ajax 方法。

   $.ajax({
        type: "GET",
        url: remote_url,
        async: false,
        success : function(data) {
            remote = data;
        }
    });
于 2013-08-27T08:11:08.377 回答
0

在第二种情况下,您实际获取 JSON 的调用花费的时间比到达“成功”/“完成”回调之外的使用点所需的时间长,因为 的异步性getJSON,所以值在函数返回之前是 / 是自然未定义的,因此是“成功”/“完成”函数。

于 2013-08-27T08:11:09.113 回答
-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

于 2013-08-27T08:12:00.513 回答