我无法序列化JSON对象“data”,如下所示。
<script type="text/javascript">
var myObj = {'first_name':{'answers':{'0':'John'}}};
var postdata = {'data':myObj};
$.post("get_note.php", postdata, function(data){
$('#note').text(data);
});
</script>
以下是文件get_note.php中的代码:
<?php
print_r($_POST['data']);
?>
这会导致以下内容被打印到#note元素。
Array ( [first_name] => )
数组似乎是空的。我期待PHP文件中有一个多维数组。它为什么空?
答案 0 :(得分:0)
在客户端上,您可以通过执行纯{javascript JSON.stringify()
来序列化。在服务器上,您需要在字符串上执行php json_decode()
。
所以在客户端:
var postdata = {'data':JSON.stringify(myObj)};
并在服务器上:
$myObj = json_decode(htmlspecialchars_decode($_POST['data']),true);
参考文献:
js JSON.stringify():http://www.json.org/js.html
php json_decode():http://php.net/manual/en/function.json-decode.php
答案 1 :(得分:0)
您可以尝试发送序列化的JSON数组并在服务器端解密。
要序列化JSON数组,请使用:
var my_json_array = { index: 11 };
JSON.stringify(my_json_array);
然后在服务器端,您可以将它转换(解码)为PHP数组,如下所示:
$json = $_POST["my_json_array"];
$my_array = json_decode($json);
所以你的代码会转入:
<script type="text/javascript">
var data = {'first_name':{'answers':{'0':'John'}}};
var postdata = {'data':JSON.stringify(data)};
$.post("get_note.php", postdata, function(data){
$('#note').text(data);
});
</script>
和
<?php
print_r(json_decode($_POST['data']));
?>
如何说,这个解决方案适用于新的浏览器(具有本机JSON支持),对于较旧的浏览器,这个解决方案不起作用。
有关浏览器中JSON支持的更多信息,请参阅此处:
http://en.wikipedia.org/wiki/JSON#Native_encoding_and_decoding_in_browsers