如何在JQuery中序列化JSON对象

时间:2012-04-12 21:29:14

标签: javascript jquery

我无法序列化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文件中有一个多维数组。它为什么空?

2 个答案:

答案 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