我正在使用jQuery将json对象发布到我的php应用程序。
jQuery.post("save.php",JSON.stringify(dataToSend), function(data){ alert(data); });
从firebug拉出的json字符串看起来像这样
{ "data" : [ { "contents" : "This is some content",
"selector" : "DIV.subhead"
},
{ "contents" : "some other content",
"selector" : "LI:nth-child(1) A"
}
],
"page" : "about_us.php"
}
在php中我试图把它变成一个关联数组。
到目前为止,我的PHP代码是
<?php
$value = json_decode(stripcslashes($_POST));
echo $value['page'];
?>
对ajax调用的响应应为“about_us.php”,但它会返回空白。
答案 0 :(得分:86)
$_POST
。
相反,请从这样的read-only php://input
stream读取以获取原始请求正文:
$value = json_decode(file_get_contents('php://input'));
答案 1 :(得分:16)
您可以避免使用JSON.stringify
和json_decode
:
jQuery.post("save.php", dataToSend, function(data){ alert(data); });
和
<?php
echo $_POST['page'];
?>
<强>更新强>
...但如果您真的想要使用它们,那么:
jQuery.post("save.php", {json: JSON.stringify(dataToSend)}, function(data){ alert(data); });
和
<?php
$value = json_decode($_POST['json']);
echo $value->page;
?>
答案 2 :(得分:3)
如果你想要关联数组,则将第二个参数传递为true,否则它将保持返回对象。
$value = json_decode(stripslashes($_POST),true);
答案 3 :(得分:1)
尝试:
echo $value->page;
因为json_decode
的默认行为是返回stdClass
类型的对象。
或者,将第二个可选$assoc
参数设置为true
:
$value = json_decode(stripslashes($_POST), true);
echo $value['page'];
答案 4 :(得分:1)
看起来jQuery可能以urlencoded格式编码javascript对象,然后将填充到$ _POST中。至少来自他们的examples。我会尝试将您的对象传递到post()
而不进行字符串化。
答案 5 :(得分:0)
如果要将json数据用作关联数组,可以尝试如下:
ToolStripItem