PHP可以接收不同的内容类型吗?

时间:2012-10-16 03:34:32

标签: php jquery

  

可能重复:
  handle json request in PHP

以下内容:

$.ajax({
    type: 'POST',
    url: 'receive-json.php',
    contentType: 'application/json; charset=UTF-8',
    data: '{"phpJSON":' + JSON.stringify(myJSON) + '}',
    success: function(data){},
    dataType: 'json'
});

将其作为纯JSON发送到服务器:

{"phpJSON":[{"id":"1","user":"foo","colour":"red"},{"id":"2","user":"bar","colour":"green"},{"id":"3","user":"baz","colour":"blue"}]}

但PHP无法识别它。因此,我从.ajax()调用(data: {"phpJSON":' + JSON.stringify(myJSON) + '})中的数据值周围删除了单引号,以便它成为一个对象(而不是一个字符串),而是将其发送到服务器: / p>

phpJSON%5B0%5D%5Bid%5D=1&data%5B0%5D%5Buser%5D=foo&data%5B0%5D%5Bcolour%5D=red&data%5B1%5D%5Bid%5D=2&data%5B1%5D%5Buser%5D=bar&data%5B1%5D%5Bcolour%5D=green&data%5B2%5D%5Bid%5D=3&data%5B2%5D%5Buser%5D=baz&data%5B2%5D%5Bcolour%5D=blue

这完全正常,PHP在$_POST['phpJSON']下识别它,但是stated here,这是冗长的(特别是如果发送大量数据),甚至不需要,因为POST应该支持其他内容类型,所以有办法解决这个问题吗? PHP可以接收除application/x-www-form-urlencoded以外的其他内容类型吗?

2 个答案:

答案 0 :(得分:2)

可以使用file_get_contents("php://input")读取原始帖子数据,然后运行json_decode。没有必要将它包装在具有phpJSON属性的对象中。

答案 1 :(得分:2)

PHP可以处理任何类型的传入数据。它只是内置了multipart / form-data和application / x-www-form-urlencoded并自动处理成$ _POST和$ _FILES。

您可以通过php://输入流手动“接收”您想要的任何内容。但是将它处理成可用的形式将取决于你。