在ajax调用中,我检索一个JSON对象,并通过lenght属性计算结果数。但在另一个代码中,使用相同类型的调用和对服务器端脚本的少许修改,长度属性总是找不到我的定义。为什么? 请注意,在开发人员控制台中,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”的字符串版本
{ “视频”:{ “持续时间”: “5点51”, “视图”: “2650”, “VIDEO_ID”: “512498”, “等级”: “5.00”, “评分”: “5” ,“title”:“Lovely dog”,“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++
但关键是我真的想知道为什么会发生这个
答案 0 :(得分:1)
这是你的结果:
{"tags":{"8":"funny", "54":"lol","75":"Animals","89":"Garden"}}
这就是为什么你将无法使用.length
如果您有类似 LOOK AT THE DEMO :
var res =
{ "tags": [
{"8":"funny"},
{"54":"lol"},
{"75":"Animals"},
{"89":"Garden"}
]}
然后.length
可以使用res['tags'].length
。
答案 1 :(得分:0)
无论如何,我知道如何计算标签的数量
var length=0; for(var elemy in res['video']['tags']) length++
但关键是我真的想知道为什么会发生这个
发生这种情况的原因是因为res['video']['tags']
是使用大括号{...}
定义的对象,因此它不具有长度属性,因为它不是正确的数组。正确的数组(定义它们的一种方法是使用方括号[]
)确实有一个长度属性。
注意:命名属性(即,未按整数索引)不计入数组长度的一部分,但也可以添加到数组中。反之亦然 - 编号属性可以添加到对象中。