标签:
ajax关键代码如下
var myArray={id:"1",type:"new",status:"good"}; $.post("test.php", {‘do‘:‘save‘,‘myArray‘:JSON.stringify(myArray)},function(data){ console.log(data); }); //post方式发送两个参数do和myArray,其中myArray是一个经过序列化后的json字符串
php中关键代码如下
//接收post传递的参数 $do=$_POST[‘id‘]; $myArray=$_POST[‘myArray‘]; //解析json字符串 $arr=json_decode($myArray,true); var_dump($arr);//结果居然输出 null
求助万能的百度(谷歌被墙失联了:P)有人说是跟contentType设置有关,也有人说要使用高深的file_get_contents
(
"php://input"
),按照这两个方向搞了半天,最后还是没搞出来...
后来我把接收到的json字符串不做处理直接打印出来,发现字符串类似这样
string ‘{\"id\":\"1\",\"type\":\"new\",\"status\":\"good\"}‘
与前端通过JSON.stringify()生成的json字符串对比
{"title_1_6":"effect_6,0.6,1.0","telecom_1_4":"effect_11,0.6,1.0"}
发现多了许多斜杠:\,也就是说,系统自动给传入的标准的json字符串中的引号加入了转义处理,这样它就不是一个标准的json字符串了!因此需要对它做反转义处理,如下:
$arr=json_decode(stripslashes($_POST[‘myArray‘]),true) //去掉字符串中的斜杠转义符,成功
搞了半天头晕眼花,原来这就是一个json基础格式问题!!!
另外,php中自动给json字符串加入转义处理的功能是因为开启了设置
magic_quotes_gpc=On
通过下面的方法可以自动判断是否开启此设置,并作相应处理
$json_string = $_POST["json_str"]; if(ini_get("magic_quotes_gpc")=="1") { $json_string=stripslashes($json_string); } $user = json_decode($json_string, true);//true表示把json转换成数组而不是对象
标签:
原文地址:http://my.oschina.net/codespring/blog/412959