1. 前言
前端和PHP端(服务器)通过ajax进行数据交互时,数据格式一般为字符串、数组、json、json数组。下面,我们针对这四种数据格式,进行前端和PHP端模拟交互,寻找一些规律和结论。
2. 前端
1 | var data = { |
3. PHP端
3.1. 接收字符串
1 | $product_name = $_POST['product_name']; |
由结果看出,PHP端获取到了product_name。
3.2. 接收数组
1 | $product_arr = $_POST['product_arr']; |
由结果看出,PHP端获取到了product_arr。
1 | $product_arr = $_POST['product_arr']; |
由结果看出,PHP端拿到的确实是数组。
3.3. 接收json
1 | $product_json = $_POST['product_json']; |
由结果看出,PHP获取到了product_json。
1 | $product_json = $_POST['product_json']; |
根据返回结果,猜测PHP端拿到的json数据是字符串。
1 | $product_json = json_decode($_POST['product_json']); |
根据返回结果,证明PHP端拿到的json数据不是字符串。因为json字符串通过json_decode函数是可以转换成json格式数据的,而此处的json数据转换失败。
后端已经没有办法再变化,我们调整前端数据格式,把json数据先转化成字符串再传输。
1 | var data = { |
根据返回结果,证明前端json数据必须先转换成字符串,然后PHP端可以获取json字符串,接着正常处理即可。
3.4. json数组
1 | $product_json_arr = $_POST['product_json_arr']; |
由结果看出,PHP端拿到了product_json_arr。
1 | $product_json_arr = $_POST['product_json_arr']; |
由结果看出,PHP端拿到的确实是数组。
1 | $product_json_arr = $_POST['product_json_arr']; |
由结果看出,PHP端拿到的是数组,但是数组里的并不是json数据。
1 | $product_json_arr = json_decode($_POST['product_json_arr'],true); |
由结果看出,数组里的json数据不是字符串,猜测这里也需要前端先转json字符串。
调整前端数据格式,把json数组数据先转化成字符串再传输。
1 | var data = { |
由结果看出,依然不行。
再次修改后端代码:
1 | $product_json_arr = json_decode($_POST['product_json_arr']); |
输出成功,也就是说,问题出在json_decode上面。json_decode($str, true) 可以得到数组,第二参数不加默认为false,得到对象。而json数组出现时,要选择生成对象。
4. 小结
通过上面的实验,我们可以得出结论:涉及到json格式的数据,需要在前端先使用JSON.stringify()函数转换为字符串;然后,在PHP端通过json_decode()函数转换为对象。