Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么PHP json_编码忽略空数组?_Javascript_Php_Arrays_Json - Fatal编程技术网

Javascript 为什么PHP json_编码忽略空数组?

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},

我有以下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>
我希望从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要创建什么样的数据结构,并让它填充到空数组中
  • 在客户端上生成JSON

  • 这不是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([])
    };