1

我有这个 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);
          } 
    }
});

当我在打开控制台的 Google Chrome 页面中时,我收到以下消息:

Uncaught TypeError: Cannot read property 'id' of undefined 

我的表达有什么问题?

4

4 回答 4

8

正如它所说people[i]的是未定义的。

我假设您由于测试而超出范围:<= people.length应该<改用。

尝试 :

for(var i = 0, max = people.length; i < max; ++i) {
  • 访问一个属性有点贵(取决于它的编码方式,它可能涉及字符串比较)。将其值存储在变量中会更快。
  • ++i比 快i++
于 2013-07-24T12:49:43.163 回答
0

Change your success function like this (before for loop):

people = $.parseJSON(people);
于 2013-07-24T12:51:55.400 回答
0

猜猜问题在这里

for(var i = 0; i<= people.length; i++){

      } 

数组索引超出范围。

于 2013-07-24T12:55:07.057 回答
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
}
于 2013-07-24T12:49:58.967 回答