作者UniFish (贡贡老盃)
看板Ajax
标题Re: [问题] javascript传json给php
时间Sat Aug 25 13:15:07 2012
推文很难讲清楚,开一篇好了
※ 引述《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
1F:推 liar2:想问大大一个小问题 我js传member过去是一个array 08/25 14:56
2F:→ liar2:那传到php之後 就一样是个php的array嘛? 08/25 14:56
3F:→ liar2:还有 我要怎麽取得php array中的所有元素 不好意思 08/25 14:57
4F:→ liar2:问题很多 对web接触刚起步 0.0 08/25 14:58
会是个array, 但你的写法会有个问题,
$.each会是非同步的处理,很有可能你的member会是个空array
※ 编辑: UniFish 来自: 111.254.114.198 (08/25 15:27)
5F:推 liar2:那不用each的话 有没有其他可能的写法 08/25 16:54
6F:→ liar2:我刚刚成功传过去之後 发现array都只有存到最後一个值 08/25 16:55
sorry, 误看了code
更正一下,data: obj
这样传去PHP後$_POST就如同我讲的那样子
jQuery 1.5後可以使用deffer, 用$.promise()串接吧
※ 编辑: UniFish 来自: 111.254.114.198 (08/25 18:37)