如何获取请求有效载荷


118

我正在使用PHPExtJSajax存储

它不通过POST或GET发送数据(在创建,更新,销毁时)。在Chrome控制台中,我在“ 请求有效负载 ”字段中看到我的传出参数为JSON 。$ _POST$ _GET为空。

如何在PHP中检索它?

Answers:


255

如果我正确理解这种情况,那么您只是通过http正文而不是application/x-www-form-urlencoded数据传递json 数据。

您可以使用以下代码段获取此数据:

$request_body = file_get_contents('php://input');

如果要传递json,则可以执行以下操作:

$data = json_decode($request_body);

$data 然后包含的json数据是php数组。

php://input是所谓的包装器

php:// input是一个只读流,允许您从请求正文中读取原始数据。对于POST请求,最好使用php:// input而不是$ HTTP_RAW_POST_DATA,因为它不依赖于特殊的php.ini指令。此外,对于默认情况下不填充$ HTTP_RAW_POST_DATA的情况,这是激活always_populate_raw_post_data的一种潜在的较少内存占用的替代方法。php:// input不适用于enctype =“ multipart / form-data”。


2
我可以检索数据。谢谢。!
nkuhta 2012年

7
非常感谢!我一直在寻找这个答案好几天了,以为我疯了。
Zacho 2012年

标头是application / json
Angelin Nadar 2012年

@AngelinNadar然后适用此答案。
Ikke 2012年

如果使用Laravel,只需创建一个帮助函数,即可1.检索此字符串,然后2. json_decode对其进行编码。然后,它与Inp​​ut :: all();的数组没有什么不同。一方面,这可能也不适用于其他所有人。
Michael J. Calkins 2013年

12

您也可以使用设置extJ writer,它将定期发送数据(因此,您将能够通过和检索数据 )。encode: true$_POST$_GET

...这些值将作为请求参数的一部分发送,而不是原始帖子(通过ext.data.writer.Json编码配置的文档

更新

还有文档说:

仅当定义了根目录时,encode选项才应设置为true

因此,可能需要writerroot配置。


@NikitaKuhta,您设置了writerroot配置吗?可能是必需的。encode确实为我工作imageshack.us/f/32/20120308153201.png
分子人
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.