2013-08-27 84 views
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 

我该如何解决这个问题?

回答

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

希望它能帮助。

0

发生这种情况是因为getJSON是异步的。

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

$.ajax({ 
     type: "GET", 
     url: remote_url, 
     async: false, 
     success : function(data) { 
      remote = data; 
     } 
    }); 
0

您的来电实际获得JSON,在第二种情况下,由于的异步时间超过它需要去的“成功” /“完成”的回调,外使用点getJSON,所以这个值在函数返回前自然是未定义的,因此“成功”/“完成”函数。

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

使用f,而不是在$。每个

+0

data.faces什么是错在它ü需要使用的每个函数内部data.faces因为ü已经分配了各指标在变量f中 –