1

我无法序列化 JSON 对象“数据”,如下所示。

<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 文件中有一个多维数组。为什么是空的?

4

2 回答 2

0

在客户端,您可以通过JSON.stringify()纯 javascript 进行序列化。在服务器上,您需要对json_decode()字符串执行 php。

所以在客户端:

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

于 2012-04-12T21:32:29.820 回答
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

于 2012-04-12T21:38:17.867 回答