我在这个javascript循环操作中做错了什么?

时间:2014-04-07 13:06:53

标签: javascript arrays json loops object

我已经使用AJAX从php调用了一些数据,如果我编码alert(data.a)的结果看起来像这样......

({a:[{my_id:"34", name:"Dave"}, {my_id:"39", name:"Barry"}]} 

我不知道如何循环使用它来提取值。

我的最新代码......

for (var key in data.a)
{
 if (data.a.hasOwnProperty(key))
 {
   alert(key + " -> " + data.a[key]);
 }
}

...显示

0 -> [object Object]

,这也显示相同......

for (var i=0,  tot=data.a.length; i < tot; i++)
{
  for (var key in data.a[i]) 
  {
    if (data.a[i].hasOwnProperty(key))
    {
      alert(key + " -> " + data.a[i][key]);
    }
  }
}

循环查看这些结果以提取数据以进行显示的技巧是什么?

如果有帮助,这就是我在php结束时发送的内容......

$x['a'] = $myArray; 
echo json_encode($x);

感谢您的时间和帮助。

4 个答案:

答案 0 :(得分:2)

你是不是喜欢这样的?循环遍历所有对象,打印出所有属性和值?

for (var i = 0; i < data.a.length; i++) {
    var objectInArray = data.a[i];
    var keys = Object.keys(objectInArray);
    for (var j = 0; j < keys.length; j++) {
        var key = keys[j];
        alert(key  + " -> " + objectInArray[key]);
    }
}

答案 1 :(得分:1)

当您在for循环中执行data.a[key]时,您将获得一个json对象:key = 0时为{my_id:"34", name:"Dave"},key = 1时为{my_id:"39", name:"Barry"}。因此,为了获取值你应该做这样的事情:

for (var key in data.a)
{
  if (data.a.hasOwnProperty(key))
  {
     alert(key + " -> " + data.a[key].my_id);
     // data.a[key].name to get name attribute
  }
}

答案 2 :(得分:1)

只是

for (var i=0; i < data.a.length; i++) {
  alert(data.a[i].my_id + " -> " + data.a[i].name);
}

答案 3 :(得分:1)

在您的示例中,data.a是一个对象数组,因此可以使用:

for (var i = 0; i < data.a.length; i++) {
  console.log('my_id: ' + data.a[i].my_id);
  console.log('name: ' + data.a[i].name);
}