Re: [問題] javascript傳json給php

看板Ajax作者 (貢貢老盃)時間13年前 (2012/08/25 13:15), 編輯推噓2(204)
留言6則, 1人參與, 最新討論串2/2 (看更多)
推文很難講清楚,開一篇好了 ※ 引述《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
想問大大一個小問題 我js傳member過去是一個array
08/25 14:56, 1F

08/25 14:56, , 2F
那傳到php之後 就一樣是個php的array嘛?
08/25 14:56, 2F

08/25 14:57, , 3F
還有 我要怎麼取得php array中的所有元素 不好意思
08/25 14:57, 3F

08/25 14:58, , 4F
問題很多 對web接觸剛起步 0.0
08/25 14:58, 4F
會是個array, 但你的寫法會有個問題, $.each會是非同步的處理,很有可能你的member會是個空array ※ 編輯: UniFish 來自: 111.254.114.198 (08/25 15:27)

08/25 16:54, , 5F
那不用each的話 有沒有其他可能的寫法
08/25 16:54, 5F

08/25 16:55, , 6F
我剛剛成功傳過去之後 發現array都只有存到最後一個值
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)
文章代碼(AID): #1GE5zU1y (Ajax)
討論串 (同標題文章)
文章代碼(AID): #1GE5zU1y (Ajax)