我有以下javascript将数据发送到PHP函数:
<script>
var mydata = {
id:123,
name: 'mike',
orders: []
};
$.ajax({
type: 'POST',
url: 'test.php',
data: {save_data:mydata},
success: function(data) {
alert('php received: ' + data);
}
});
</script>
和我的test.php
文件包含以下代码:
<?php
if (isset($_POST['save_data'])) {
$json = json_encode($_POST['save_data']);
echo $json; // just to check what has been received
exit();
}
?>
我期望从PHP收到的是:
{"id":"123","name":"mike","orders":"[]"}
我得到的是{"id":"123","name":"mike"}
请注意,orders
数组已从输出中删除。没有地方持有人。我尝试在数组中添加一些虚拟元素,并且工作正常,然后我收到了带有元素的数组。
我需要PHP按原样接收json对象,即使它包含空数组。
我该怎么做?
答案 0 :(得分:2)
JSON对象是在PHP中创建的。在此之前,您只需拥有表单数据。
jQuery将以PHP友好的方式对表单数据进行编码。
如果你给它:
data: { foo: [1, 2, 3] }
它会将其转换为:
foo[]=1&foo[]=2&foo[]=3
(虽然它会对[]
)进行百分比编码
您获得每个值的键值=值。
如果您有一个空数组,那么您没有任何值,因此您不会获得任何键=值对。
没有办法编码&#34;一个空数组&#34;使用PHP对表单url编码语法的扩展。
您有两个基本选项:
答案 1 :(得分:0)
这不是PHP的错误。它导致Jquery在将其发送到服务器时将igrone为空数组。因此,您必须在发送
之前将'orders'键中的数组解析为字符串JSONvar mydata = {
id:123,
name: 'mike',
orders: []
};
更改为
var mydata = {
id:123,
name: 'mike',
orders: JSON.stringify([])
};