ajax關鍵代碼以下php
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"
),按照這兩個方向搞了半天,最後仍是沒搞出來...
ajax
後來我把接收到的json字符串不作處理直接打印出來,發現字符串相似這樣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字符串了!所以須要對它作反轉義處理,以下:post
$arr=json_decode(stripslashes($_POST['myArray']),true) //去掉字符串中的斜槓轉義符,成功
搞了半天頭暈眼花,原來這就是一個json基礎格式問題!!!spa
另外,php中自動給json字符串加入轉義處理的功能是由於開啓了設置code
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轉換成數組而不是對象