如何检索请求负载

IT技术 php javascript json extjs
2021-02-05 14:41:57

我正在使用PHPExtJSajax 商店

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

如何在PHP中检索它?

2个回答

如果我正确理解了情况,那么您只是通过 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"。

如果使用 Laravel,只需创建一个辅助函数,该函数 1. 检索此字符串并 2. json_decodes 它。那么它将与 Input::all(); 中的数组没有区别。一方面,这可能对其他人也不起作用。
2021-03-15 14:41:57
我可以检索数据。谢谢。
2021-03-23 14:41:57
@AngelinNadar 然后这个答案适用。
2021-04-06 14:41:57
太感谢了!几天来我一直在寻找这个答案,并认为我疯了。
2021-04-09 14:41:57
标题是 application/json
2021-04-11 14:41:57

您也可以设置ExtJS的writer使用,它会定期发送数据(和,因此,你就可以通过检索数据 )。encode: true$_POST$_GET

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

更新

此外文档说:

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

因此,可能需要writerroot配置。

@NikitaKuhta,您设置了writer根配置吗?它可能是必需的。encode对我有用 imageshack.us/f/32/20120308153201.png
2021-03-30 14:41:57