ajax前端传多维数组到php后台,关联数组转json到后台方法
【摘要】 很多人碰到过ajax传值时无法直接传数组,而百度的大多数都是不能用的所以我想到了一个方法:第一步:将数组转换为json字符串这是一个技术性的问题,百度说的JSON.stringify(arr)是不能转换关联数组的,甚至索引数组也是有很多缺点所以我特意封装了个js递归函数function arrToJSON(arr) { var json = {}; for (var i in a...
很多人碰到过ajax传值时无法直接传数组,而百度的大多数都是不能用的
所以我想到了一个方法:
第一步:将数组转换为json字符串
这是一个技术性的问题,百度说的JSON.stringify(arr)是不能转换关联数组的,甚至索引数组也是有很多缺点
所以我特意封装了个js递归函数
function arrToJSON(arr) {
var json = {};
for (var i in arr) {
var vo=arr[i];
if (typeof arr[i] == "object") {
json[i]={};
json[i] = arrToJSON(vo);
} else {
json[i] =vo;
}
}
return JSON.stringify(json);
}
复制
只要传入js多维数组,能把数组全部解析为字符串
这样就可以在ajax里面传值啦~~~
第二步 :
但是这样转换成的json字符串是不完整的,不能直接解析出全部的数组
如图
可以发现,这个函数会将下级的子json字符串给用斜杠转义,越往下走斜杠越多,
当后台json_decode 处理第一层级时,第二层其实仍是json_decode字符串
所以后台需要一个新的decode函数用于解析这个json字符串
/**
* 解析前台传来的不完整json字符串
*/
private function json_decode_x($str)
{
$data_arr = array();
$arr = json_decode($str, 1);
foreach ($arr as $x => $a) {
if (preg_match('/":/', $arr[$x])) { //匹配
$data_arr[$x] = $this->json_decode_x($a);
} else {
$data_arr[$x] = $a;
}
}
return $data_arr;
}
复制
这样的话,后台接收到json字符串,用这个函数解析,就可以得到完整正确的多维数组了
由于我的业务需求,是没有/" 这样的字符串的,所以可以用这个来判断子字符串是否还有json字符串可以解析,如果用到实际上项目,请修改该正则判断
当然有能力的人可以直接第一步改成完整的json字符串,这样后台可以直接用一个json_decode解析
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)