我试图获取数组中对象的数量,但我得到了未定义的"长度"。
我的js
..
success: function(data){
console.log(data.item.length);
},
我的菲律宾比索
<?php
$arr = array();
$arr["item"]["book"] = "harry porter";
$arr["item"]["available"] = true;
echo json_encode($arr);
?>
输出
{"item":{"book":"harry porter","available":true}}
通过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);
data = {"item":{"book":"harry porter","available":true}};
alert(Object.keys(data.item).length);
在
对 JSON 对象进行操作之前,必须将 JSON 字符串解析为 JSON 对象。
var obj = eval ("(" + data + ")");
顺便说一句,我看到该项目不是数组。如果你想把它变成一个数组,它必须是这样的
{item : [{"book" : "harry potter", "available" : true}, {..}]}
我尝试获取数组中的对象数量
在成功回调中,你得到了一个js对象,你想获取其中的objects
数。 因此,当您执行data.item.length
时,它会检查不可用的JS对象的长度。
相反,您必须检查 js 对象的键名,例如 item
在回调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);
},
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);
});