我正在尝试通过ajax获取json数组。 我的test.php返回:
[{"name":"James","age":24},{"name":"Peter","age":30}]
我的Javascript看起来像这样:
var persons=new Array();
$.getJSON("../../api/test.php", function(data){
$.each(data, function(index,value){
persons.push(new Person(value.name,value.age));
});
});
问题是当我后来调用persons.length时,我得到了无法读取未定义的属性'长度'。 当我将test.php的输出从浏览器复制/粘贴到本地变量时,一切正常:
var content=[{"name":"James","age":24},{"name":"Peter","age":30}];
for(var i=0; i<content.length; i++)
persons.push(new Person(content[i].name,content[i].age));
我做错了什么?
答案 0 :(得分:6)
这可能是范围问题。如果在函数内声明了“var persons”,那么它就在函数的范围内。仔细检查声明的位置,以及您尝试访问它的位置。
如需进一步阅读,请参阅:http://coding.smashingmagazine.com/2009/08/01/what-you-need-to-know-about-javascript-scope/
编辑: 我不相信异步调用$ .getJSON会导致问题,因为persons.length将为0,并且人们不会被定义。
var persons = new Array();
print persons.length; // ==> 0