-3

在 ajax 调用中,我检索一个 JSON 对象并通过长度属性计算结果的数量。但是在另一个代码中,通过相同类型的调用和对服务器端脚本的少量修改,长度属性检索我总是未定义。为什么?请注意,在开发人员控制台中,msg 被视为一个对象(我认为,通过 ajax 从 JSON 自动转换),而不是这样的数组。

$.ajax({
  url : 'richiediListaVideo.php',
  type : 'POST',
  data :  data,
  dataType : 'json',
  success : function (msg) 
            {
              alert(msg['videos'].length)


            },

“未定义”长度的对象类似于

-video
--title
--duration
---tags
---8  "funny"
---1352  "animals"
---13    "Tv"

我的目标是检索标签长度,我写了msg['video']['tags'].length

这是“msg”的字符串化版本

{"video":{"duration":"5:51","views":"2650","video_id":"512498","rating":"5.00","ratings":"5","title ":"可爱的狗", "publish_date":"2013-08-05 16:50:08","tags":{"8":"funny", "54":"lol","75":"动物","89":"花园"}}}

澄清:无论如何我知道如何计算标签的数量,但关键是我真的想知道为什么会这样


无论如何,我知道如何计算标签的数量

var length=0; 
for(var elemy in res['video']['tags']) length++

但关键是我真的很想知道为什么会这样

4

2 回答 2

1

这是你的结果:

{"tags":{"8":"funny", "54":"lol","75":"Animals","89":"Garden"}}

这就是为什么您将无法使用.length.
如果您有类似的东西,请看演示

var res = 
{ "tags": [
     {"8":"funny"}, 
     {"54":"lol"},
     {"75":"Animals"},
     {"89":"Garden"}
]}

然后.length将继续工作res['tags'].length

于 2013-08-07T02:27:55.543 回答
0

无论如何,我知道如何计算标签的数量

var length=0; 
for(var elemy in res['video']['tags']) length++

但关键是我真的很想知道为什么会这样

发生这种情况的原因是因为res['video']['tags']它是一个用大括号定义的对象{...},因此它不具有长度属性,因为它不是一个正确的数组。正确的数组(定义它们的一种方法是使用方括号[])确实具有长度属性。

注意:命名属性(即,不是由整数索引)不计入数组长度的一部分,但也可以添加到数组中。反之亦然——编号属性可以添加到对象中。

于 2013-08-07T02:13:10.723 回答