视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
ajax前端的关联数组转json到后台方法
2020-11-27 19:59:34 责编:小采
文档
 这次给大家带来ajax前端的关联数组转json到后台方法,ajax前端的关联数组转json到后台的注意事项有哪些,下面就是实战案例,一起来看一下。

很多人碰到过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解析

相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

推荐阅读:

怎样阻止JS的冒泡和浏览器的默认行为

JS怎样刷新父页面

js与canvas合成图片做出微信公众号海报功能

下载本文
显示全文
专题