解码AJAX编码的JSON对象

时间:2012-09-28 13:00:46

标签: php javascript ajax json

这可能很简单,但我真的可以通过Ajax和JSON的方式使用更聪明的人来帮助。我有Javascript函数将Ajax请求传递给PHP后端。我正在传递一个javascript对象作为“request_parameters”post变量。当这显示在PHP上我能够导航它但对象结构已被数组替换。相反,我希望对象结构保持完整,因此作为智能足够危险的类型我决定对对象进行JSON编码:

 request_parameters: JSON.encode( requestObj );

相对
 request_parameters: requestObj;

在PHP方面,我现在将其作为“request_parameters”变量的值(又名$ _POST ['request_paramenters']):

  

{\“forms \”:[{\“formName \”:\“main-form \”,\“formClass \”:\“lg-form main-form \”,\“formFields \”:[ {\ “ID \”:\ “活动-APP_ID \” \ “名称\”:\ “活动-APP_ID \”,\ “值\”:\ “0 \” \ “类型\”:\“隐藏\ “\ ”startingValue \“:空},{\ ”ID \“:\ ”活动为START_TIME \“,\ ”名称\“:\ ”活动为START_TIME \“,\ ”价值\“:\” \ “\ ”类型\“:\ ”隐藏\“,\ ”startingValue \“:空},{\ ”ID \“:\ ”最小持续时间\“,\ ”名称\“:\” 最小持续时间\ “,”\“class \”:\“span1 form-ignore \”,\“value \”:\“50 \”,\“type \”:\“text \”,\“startingValue \”:null}, {\ “ID \”:\ “活动持续时间\”,\ “名称\”:\ “活动持续时间\”,\ “值\”:\ “3000000 \” \ “类型\”:\“隐藏\ “\ ”startingValue \“:空},{\ ”ID \“:\ ”运动距离\“,\ ”名称\“:\ ”运动距离\“,\ ”级\“:\” 输入span1 left \“,\”value \“:\”25 \“,\”type \“:\”text \“,\”startingValue \“:null},{\”id \“:\”exercise-distance -uom \”,\ “名称\”:\ “运动distance_uom \”,\ “价值\”:\ “哩\”,\ “类型\”:\ “隐藏\”,\ “startingValue \”:空},{\ “ID \”:\ “运动pace_average \” \ “名称\”:\ “运动pace_average \”,\ “值\”:\ “2 \” \ “类型\”:\ “隐藏\”,\“明星tingValue \ “:空},{\” ID \ “:\” wp_posts-POST_CONTENT \ “\ ”名称\“:\ ”wp_posts-POST_CONTENT \“,\ ”级\“:\ ”span5 \“,\” value \“:\”super fast \“,\”type \“:\”textarea \“,\”startingValue \“:null}]}],\”action \“:\”go-running \“,\ “post_type \”:\ “演习\”,\ “primaryForm \”:0}

好的,所以这显然已被编码,以便数据作为POST / GET变量传递而不会发生坏事。很公平。我想我可以在PHP端通过在运行json_decode函数之前使用解码来解决这个问题。我第一次尝试:

$request_parameters = json_decode( urldecode($request_parameters) );

可以肯定,这将是一个胜利者。不。它没有给出错误,但$ request_parameters似乎没有设置为任何东西。好吧,然后我有点疯了以为......“嘿,也许javascript使用了base64编码”......这导致我:

$request_parameters = json_decode( base64_decode($request_parameters) );

坏juju。我会把它留在那里。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

尝试json_decode(stripslashes($_POST['request_parameters']));

您可能已启用magic_quotes

[被修改]

如果您启用了Magic Quotes,请检查下面评论中提供的链接并将其停用。如果您盲目地使用stripslashes并稍后更改服务器设置或移至其他服务器,则上述代码将中断。

但是,如果在您的情况下禁用魔术引号不是一个可能的选项,那么使用下面的代码从这个特定的post参数中去除斜杠。

if (get_magic_quotes_gpc()) {
  $request_parameters = stripslashes($_POST['request_parameters']);
}
$request_parameters = json_decode($request_parameters);

答案 1 :(得分:-2)

json_decode($_POST['request_parameters']);应该就是您所需要的一切。