ajax前端传多维数组到php后台,关联数组转json到后台方法

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: ajax前端传多维数组到php后台,关联数组转json到后台方法

很多人碰到过ajax传值时无法直接传数组,而百度的大多数都是不能用的


所以我想到了一个方法:


image.png


第一步:将数组转换为json字符串


这是一个技术性的问题,百度说的JSON.stringify(arr)是不能转换关联数组的,甚至索引数组也是有很多缺点


所以我特意封装了个js递归函数

functionarrToJSON(arr) {

    varjson = {};

    for(varinarr) {

        varvo=arr[i];

        if(typeofarr[i] == "object") {

            json[i]={};

            json[i] = arrToJSON(vo);

        else{

            json[i] =vo;

        }

    }

    returnJSON.stringify(json);

}

只要传入js多维数组,能把数组全部解析为字符串


这样就可以在ajax里面传值啦~~~


第二步 :


但是这样转换成的json字符串是不完整的,不能直接解析出全部的数组


如图image.png


可以发现,这个函数会将下级的子json字符串给用斜杠转义,越往下走斜杠越多,


当后台json_decode 处理第一层级时,第二层其实仍是json_decode字符串


所以后台需要一个新的decode函数用于解析这个json字符串

/**

 * 解析前台传来的不完整json字符串

 */

privatefunctionjson_decode_x($str)

{

    $data_arrarray();

    $arr= json_decode($str, 1);

    foreach($arras$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解析


目录
相关文章
|
3月前
|
前端开发 API UED
Python后端与前端交互新纪元:AJAX、Fetch API联手,打造极致用户体验!
Python后端与前端交互新纪元:AJAX、Fetch API联手,打造极致用户体验!
109 2
|
2月前
|
前端开发 JavaScript
回顾前端页面发送ajax请求方式
回顾前端页面发送ajax请求方式
38 18
|
2月前
|
JavaScript 前端开发 算法
前端优化之超大数组更新:深入分析Vue/React/Svelte的更新渲染策略
本文对比了 Vue、React 和 Svelte 在数组渲染方面的实现方式和优缺点,探讨了它们与直接操作 DOM 的差异及 Web Components 的实现方式。Vue 通过响应式系统自动管理数据变化,React 利用虚拟 DOM 和 `diffing` 算法优化更新,Svelte 通过编译时优化提升性能。文章还介绍了数组更新的优化策略,如使用 `key`、分片渲染、虚拟滚动等,帮助开发者在处理大型数组时提升性能。总结指出,选择合适的框架应根据项目复杂度和性能需求来决定。
|
2月前
|
人工智能 前端开发 JavaScript
拿下奇怪的前端报错(一):报错信息是一个看不懂的数字数组Buffer(475) [Uint8Array],让AI大模型帮忙解析
本文介绍了前端开发中遇到的奇怪报错问题,特别是当错误信息不明确时的处理方法。作者分享了自己通过还原代码、试错等方式解决问题的经验,并以一个Vue3+TypeScript项目的构建失败为例,详细解析了如何从错误信息中定位问题,最终通过解读错误信息中的ASCII码找到了具体的错误文件。文章强调了基础知识的重要性,并鼓励读者遇到类似问题时不要慌张,耐心分析。
|
2月前
|
前端开发 JavaScript
jQuery - AJAX load() 方法
jQuery load() 方法是简单但强大的 AJAX 方法。
53 6
|
2月前
|
JSON 前端开发 数据格式
@RequestMapping运用举例(有源码) 前后端如何传递参数?后端如何接收前端传过来的参数,传递单个参数,多个参数,对象,数组/集合(有源码)
文章详细讲解了在SpringMVC中如何使用`@RequestMapping`进行路由映射,并介绍了前后端参数传递的多种方式,包括传递单个参数、多个参数、对象、数组、集合以及JSON数据,并且涵盖了参数重命名和从URL中获取参数的方法。
158 0
@RequestMapping运用举例(有源码) 前后端如何传递参数?后端如何接收前端传过来的参数,传递单个参数,多个参数,对象,数组/集合(有源码)
|
3月前
|
JSON 前端开发 JavaScript
jQuery AJAX 方法
jQuery AJAX 方法
35 1
|
3月前
|
JavaScript 前端开发
jQuery - AJAX load() 方法
jQuery - AJAX load() 方法
21 2
|
2月前
|
前端开发 JavaScript 小程序
前端uni开发后端用PHP的圈子系统该 如何做源码?
圈子系统系统基于TP6+Uni-app框架开发;客户移动端采用uni-app开发,管理后台TH6开发。系统支持微信公众号端、微信小程序端、H5端、PC端多端账号同步,可快速打包生成APP
|
3月前
|
XML JavaScript 前端开发
jQuery - AJAX get() 和 post() 方法
jQuery - AJAX get() 和 post() 方法
28 6