我的表情有什么问题?

时间:2013-07-24 12:48:21

标签: javascript jquery ajax json

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

我的表情有什么问题?

4 个答案:

答案 0 :(得分:8)

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

我认为你因测试而超出了范围:<= people.length应该使用<代替。

尝试:

for(var i = 0, max = people.length; i < max; ++i) {
  • 访问属性有点贵(取决于它的编码方式,它可能涉及字符串比较)。将其值存储在变量中可以更快。
  • ++ii++快。

答案 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++){

      } 

数组索引超出范围。