PHP生成含数组的JSON后,如何用JavaScript/jQuery访问其中数组
解决PHP数组通过WebSocket传递后JavaScript无法获取的问题
我一眼就看出问题出在PHP端的数组包裹层级上,咱们一步步拆解:
问题根源
先看你的PHP代码:
$everything= array($ary); // 这里你把$ary又额外包了一层新数组 $response = json_encode(array( 'code'=>'0', 'id'=>$id, 'usr'=>$usr, 'everything'=>$everything ));
这会导致json_encode后,everything对应的JSON结构是一个包含原$ary的数组(比如原$ary是[1,2,3],那最终everything会变成[[1,2,3]])。而你的前端代码直接取received.everything,拿到的是这个外层数组,不是你真正想要的原$ary内容。
两种解决方案
方案1:修改PHP代码(推荐)
直接把$ary赋值给everything,去掉多余的数组包裹:
// 直接使用原数组,不要额外嵌套 $everything = $ary; $response = json_encode(array( 'code'=>'0', 'id'=>$id, 'usr'=>$usr, 'everything'=>$everything ));
这样前端拿到的received.everything就是原$ary的内容,直接使用即可。
方案2:如果PHP端不能修改,调整前端代码
既然PHP传递过来的是嵌套数组,那前端就取外层数组的第一个元素:
websocket.onmessage = function(ev) { received = JSON.parse(ev.data); // 取嵌套数组的第0个元素,就是原$ary var everything = received.everything[0]; // 现在可以正常操作everything了 };
调试小技巧
以后遇到这类数据结构问题,建议在前端打印完整的返回对象,直观查看层级:
websocket.onmessage = function(ev) { received = JSON.parse(ev.data); console.log('完整返回数据:', received); // 在控制台查看所有字段的结构 };
这样你能一眼看到每个字段的层级,快速定位问题。
内容的提问来源于stack exchange,提问作者za1782852
相关产品推荐
相关产品推荐

