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

Cannot read property 'length' of undefined in ajax

本文关键字:属性 长度 未定义 读取 ajax      更新时间:2023-09-26

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

我的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); 
});