0

可能重复:
在 PHP 中处理 json 请求

以下:

$.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) + '}以便它成为一个对象(而不是字符串),而是将其发送到服务器:

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']但是正如这里所说,这是冗长的(特别是如果发送大量数据时),甚至没有必要,因为 POST 应该支持其他内容类型,那么有没有办法解决这个问题?PHP 可以接收其他 Content-Typesapplication/x-www-form-urlencoded吗?

4

2 回答 2

2

可以使用 读取原始帖子数据file_get_contents("php://input"),然后通过json_decode. 不必将其包装在具有该phpJSON属性的对象中。

于 2012-10-16T03:38:35.063 回答
2

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

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

于 2012-10-16T03:39:44.123 回答