Javascript 为什么PHP json_编码忽略空数组?
我有以下javascript将数据发送到PHP函数:Javascript 为什么PHP json_编码忽略空数组?,javascript,php,arrays,json,Javascript,Php,Arrays,Json,我有以下javascript将数据发送到PHP函数: <script> var mydata = { id:123, name: 'mike', orders: [] }; $.ajax({ type: 'POST', url: 'test.php', data: {save_data:mydata},
<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>
我希望从PHP得到的是:
{“id”:“123”,“name”:“mike”,“orders”:“[]”}
我得到的是{“id”:“123”,“name”:“mike”}
请注意,orders
数组已从输出中删除。它没有占位符。我尝试在数组中添加一些虚拟元素,效果很好,我收到了带有这些元素的数组
我需要PHP按原样接收json对象,即使它包含空数组
我该怎么做呢?JSON对象是在PHP内部创建的。在此之前,您只需要表单数据 jQuery将以PHP友好的风格对表单数据进行编码 如果你给出:
data: { foo: [1, 2, 3] }
它将转换为:
foo[]=1&foo[]=2&foo[]=3
(尽管它将对[]
进行百分比编码)
每个值都有一个key=value对
如果您有一个空数组,那么您没有任何值,因此您不会得到任何key=value对
无法使用PHP对表单url编码语法的扩展对“空数组”进行编码
您有两个基本选项:
这不是PHP的错误。这是因为Jquery在将其发送到服务器时会忽略空数组。因此,在发送之前,必须将“orders”键中的数组解析为字符串JSON
var mydata = {
id:123,
name: 'mike',
orders: []
};
改为
var mydata = {
id:123,
name: 'mike',
orders: JSON.stringify([])
};
如果我有一个匹配从json传递的属性的PHP类,它会工作吗?如果是这样,我如何告诉PHP使用json传递的值实例化类的实例?您可以将内容类型设置为application/json并发送原始json,而不是以url编码的方式发送json数据。然后,在php中,用户可以使用file_get_contents(“php://input)这不是php。检查实际请求-不存在空数组,它只会
“[]”
字符串。您还需要在服务器端解析此orderlist。
var mydata = {
id:123,
name: 'mike',
orders: JSON.stringify([])
};