Re: [問題] javascript傳json給php
推文很難講清楚,開一篇好了
※ 引述《liar2 (liar)》之銘言:
: 如題
: 做的東西有需要用javascript把編好的json
: 傳到php中作處理存入mysql
: php傳到javascript我會
: 可是相反過來操作 我就不會了
: 這裡附上我的程式碼 不知道為什麼 在js端編出來的是正確的json
: 可是到了php decode後卻不是正確的json
: 拜託各位了
: js端:
: 其中member比較特別 是個陣列
: $('input:checkbox:checked[name="mem"]').each(function(i)
: { new_members[i] = this.value;});
: 其他都是一般變數
: var obj = {"title":new_title,
: "time":new_time,
: "content":new_content,
: "member":new_members};
: var json_obj = JSON.stringify(obj);
: alert(json_obj);
: $.ajax({
: url:"receive_meeting_set.php",
: type:"POST",
: data:{"jdata":json_obj},
這裡就直接data: obj就好啦
PHP的$_POST就會有
$_POST['title'],
$_POST['time'],
$_POST['content'],
$_POST['member'],
: dataType:"text",
: success:function(Jdata){
: alert("tt");
: alert(Jdata);},
: error:function(){alert("伺服器發生錯誤");}
: });
: php端:
: <?php
: if($_POST['jdata']!=null)
: {
: $data= json_decode($_POST['jdata']);
: echo $data." ".$_POST['jdata'];
: }
: ?>
: 其中js我用alert(json_obj);會秀出
: {"title":"123","time":"00:00","content":"123","member":["b","i","q"]}
: 應該是很正常的json沒錯
: 可是到php 我用echo $data." ".$_POST['jdata'];
: 會發現$data沒有東西 而$POST_['jdata']卻是這個
: {\"title\":\"123\",\"time\":\"00:00\",\"content\":\"123\"
: ,\"member\":[\"b\",\"i\",\"q\"]}
: 找了好久找不到解決的方法
: 新手不是很懂json array的操作
: 希望大家可以幫忙~ 文章這麼長 看完的人謝謝摟~
php經由設定會讓$_POST有個很雞婆的功能,就是會自動加slashes,
然後會讓你的json_decode爆炸。
這個功能有好有壞啦,他可以幫你濾掉基本的sql injection攻擊。
要移除方法有3:
1. 從php.ini把magic_quotes_gpc關掉
2. 改接收raw post
3. 改用filter_input
補充4. php 5.4就不會自動加slashes
--
好 嗎 ▲ ◤ ˋ ◤ ˋ ▎ φhacoolman
好 養一隻邊境牧羊犬, 嗎 / ● ● \ ▲ 養嘛養嘛養嘛
好就能常常換新手機喔! 嗎 ▊/ ◣ ◤ ◣ ◤ \ ▏ 嘛養嘛養嘛
好 嗎 │ │ ▍ 嘛養嘛養嘛
好邊境不養嗎好邊境不◥嗎▊ \ │ ▎ (●ω●)
好邊境不養嗎好邊境不養嗎 \ ︶︶ / ▏嘿~嘿~嘿~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.254.114.198
推
08/25 14:56, , 1F
08/25 14:56, 1F
→
08/25 14:56, , 2F
08/25 14:56, 2F
→
08/25 14:57, , 3F
08/25 14:57, 3F
→
08/25 14:58, , 4F
08/25 14:58, 4F
會是個array, 但你的寫法會有個問題,
$.each會是非同步的處理,很有可能你的member會是個空array
※ 編輯: UniFish 來自: 111.254.114.198 (08/25 15:27)
推
08/25 16:54, , 5F
08/25 16:54, 5F
→
08/25 16:55, , 6F
08/25 16:55, 6F
sorry, 誤看了code
更正一下,data: obj
這樣傳去PHP後$_POST就如同我講的那樣子
jQuery 1.5後可以使用deffer, 用$.promise()串接吧
※ 編輯: UniFish 來自: 111.254.114.198 (08/25 18:37)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):