我尝试获取数组中的对象数量,但我得到了长度'未定义的。
我的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}}
答案 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);
});