无法在ajax中读取未定义的属性“长度”

时间:2015-01-05 06:47:37

标签: javascript php jquery ajax

我尝试获取数组中的对象数量,但我得到了长度'未定义的。

我的js

..
      success: function(data){
        console.log(data.item.length);
      },

我的PHP

<?php
   $arr = array();
   $arr["item"]["book"] = "harry porter";
   $arr["item"]["available"] = true;

   echo json_encode($arr);
?>

输出

{"item":{"book":"harry porter","available":true}}

5 个答案:

答案 0 :(得分:1)

通过HTTP(S)请求发送的所有内容都以字符串形式接收(至少在Ajax中)。当您收到JavaScript的对象格式的字符串时,它被称为JSON。您需要将此JSON解析回可读的JavaScript对象。

您需要使用JSON.parse函数,这会将JSON转换为JavaScript对象。 此外,.length仅适用于不在对象上的数组,因此您需要使用console.log(Object.keys(data).length);

您的功能如下:

data=JSON.parse(data);
console.log(Object.keys(data).length);

答案 1 :(得分:1)

data = {"item":{"book":"harry porter","available":true}};
alert(Object.keys(data.item).length);

答案 2 :(得分:0)

在对JSON对象进行操作之前,必须将其解析为JSON对象。

var obj = eval ("(" + data + ")");

BTW,我看到该项目不是数组。如果你想让它成为一个数组,它必须像这样

{item : [{"book" : "harry potter", "available" : true}, {..}]}

答案 3 :(得分:0)

我尝试获取数组中对象的数量

在成功回调中,您有一个js对象,并且您希望在其中获得objects的数量。因此,当你执行data.item.length时,它会检查js对象的长度,该对象不可用。

相反,您必须检查回调item对象中可用的js对象的键名称,如data。所以你要找的代码是:

Object.keys(data).length

这会计算{"item":{}}的键名,所以在你的情况下你只有一个(1)

var obj = {"item":{"book":"harry porter","available":true}};
alert(Object.keys(obj).length)

所以在你的成功回调中你可以这样做:

  success: function(data){
    console.log(Object.keys(data).length);
  },

答案 4 :(得分:0)

alert(Object.keys(data).length); 

你的代码可能会喜欢这个

$.ajax({
url: "items.php",
type: "POST",
dataType: "JSON",
success: function(data) {
data=JSON.parse(data);
alert(Object.keys(data).length); 
});