如何检索请求有效负载

How to retrieve Request Payload

提问人:nkuhta 提问时间:3/7/2012 最后编辑:ggorlennkuhta 更新时间:5/15/2023 访问量:126575

问:

我正在使用 PHP、ExtJS 和 ajax 存储。

它发送数据(创建、更新、销毁时),而不是在 POST 或 GET 中。在 Chrome 控制台中,我在字段中将传出的参数视为 JSON。 并且是空的。"Request Payload"$_POST$_GET

如何在PHP中检索它?

php javascript json extjs

评论


答:

286赞 Ikke 3/7/2012 #1

如果我理解正确的话,你只是通过http正文传递json数据,而不是数据。application/x-www-form-urlencoded

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

$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”。

评论

0赞 Angelin Nadar 12/17/2012
标头为 application/json
0赞 Ikke 12/17/2012
@AngelinNadar 那么这个答案适用。
0赞 Michael J. Calkins 3/31/2013
如果使用 Laravel,只需创建一个 1.检索此字符串和 2.json_decodes它。那么它将与 Input::all() 中的数组没有什么不同;另一方面,这可能也适用于其他所有人。
0赞 tibalt 9/18/2013
你让我开心了!我一直在为js + php而苦苦挣扎!谢谢。对不起,offtop。
12赞 Molecular Man 3/7/2012 #2

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

...这些值将作为请求参数的一部分发送为 与原始帖子相反(通过 Ext.data.writer.Json 编码配置的文档

更新

文档还说:

只有在定义根时,encode 选项才应设置为 true

所以,可能是必需的配置。writerroot

评论

0赞 Molecular Man 3/8/2012
@NikitaKuhta,你设置了root配置吗?它可能是必需的。 对我有用 imageshack.us/f/32/20120308153201.pngwriterencode