php无法返回json,js解析php返回的json数据无法获取length的问题分析

1.问题出现的过程,js解析php json_encode 的数据,无法获取长度信息,提示undefined

debug:

首先打印查看了php encode后的数据,返现最外层是一个中括号,误以为编码成了一个数组,于是将其强制类型转换为Object ,但是长度依然undefined

在同样是解析json的话题ppt页面,控制台打印json,发现有一个length的属性,起初以为是在php端加到数组中的,查看后发现并非如此,于是乎stackoverflow上查询得知,要想有此属性,必须是一个json数组而非一个json对象。

所以,正常的json_encode方法得到的数据是没有问题的,真正造成解析json报错的原因是数组数据中包含了无法解析的字符 换行符\n

2.php json_encode方法

数组键值对js parseJSON的影响

1>测试数据:

$data = ["2"=>["name"=>"wwww","data"=>"cccc"],"1"=>["name"=>"xxx","data"=>"ttt"]];

encode后:

{

"1": {

"name": "xxx",

"data": "ttt"

},

"2": {

"name": "wwww",

"data": "cccc"

}

}

$.parseJSON结果

f673aa77625b72377bca6dbdecb44fb4.png

2>测试数据

$data = [“0"=>["name"=>"wwww","data"=>"cccc"],"1"=>["name"=>"xxx","data"=>"ttt"]];

[

{

"name": "wwww",

"data": "cccc"

},

{

"name": "xxx",

"data": "ttt"

}

]

$.parseJSON结果

dda12d8dc526009c96688abd9e74d188.png

可以看出来下标从0开始的数组encode之后是一个json数组,有length属性

下标非从0开始的任意键值的数组encode之后是一个json对象,无length属性

对于键值混乱的数组json_encode之后想要通过js获取对象的长度可以使用如下方法:

var getLength = function(obj) {

var i = 0, key;

for (key in obj) {

if (obj.hasOwnProperty(key)){

i++;

}

}

return i;

};

原文:http://www.cnblogs.com/skyfynn/p/5525861.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值