我有这个JSON编码的字符串:
[{"id":"23","name":"Louis"},{"id":"24","name":"Lucya"}]
我在$.ajax
这样的调用中使用它:
$.ajax({
type: "GET",
dataType:"json",
url: "res/main.php",
data: { command : "loadPeople" },
success: function( people ){
for(var i = 0; i<= people.length; i++){
var tableRow = '<tr><td>' + people[i]['id'] + '</td><td>' + people[i]['name'] + '</td><td style="text-align: right;"><img src="res/img/b_drop.png" width="16" height="16" id="delete_' + people[i]['id'] + '" alt="" onclick="deletePeople('+people[i]['id']+');"/></td></tr>';
$("#people").append(tableRow);
}
}
});
当我在谷歌浏览器的页面中打开控制台后,我收到以下消息:
Uncaught TypeError: Cannot read property 'id' of undefined
我的表情有什么问题?
答案 0 :(得分:8)
正如所说people[i]
未定义。
我认为你因测试而超出了范围:<= people.length
应该使用<
代替。
尝试:
for(var i = 0, max = people.length; i < max; ++i) {
++i
比i++
快。答案 1 :(得分:0)
问题是那个长度,因为比你的数组长度多一倍 试试这个:
$.ajax({
type: "GET",
dataType:"json",
url: "res/main.php",
data: { command : "loadPeople" },
success: function( people ){
for(var i = 0; i<= people.length-1; i++){
var tableRow = '<tr><td>' + people[i]['id'] + '</td><td>' + people[i]['name'] + '</td><td style="text-align: right;"><img src="res/img/b_drop.png" width="16" height="16" id="delete_' + people[i]['id'] + '" alt="" onclick="deletePeople('+people[i]['id']+');"/></td></tr>';
$("#people").append(tableRow);
}
}
});
或者这个:
for(var i = 0; i< people.length; i++){
}
问题是如果在你的json中你没有分配id你可以检查这个值是否未定义:
if(people[i]['id']!= undefined){
//code
}
答案 2 :(得分:0)
像这样更改你的成功函数(在for循环之前):
people = $.parseJSON(people);
答案 3 :(得分:0)
猜猜问题在这里
for(var i = 0; i<= people.length; i++){
}
数组索引超出范围。