如何获取请求有效载荷

126

我正在使用PHP、ExtJS和ajax store。

它在创建、更新、删除时发送数据,但不是通过POST或GET方式。在Chrome控制台中,我可以看到我的传出参数以JSON格式显示在“请求有效载荷”字段中。而$_POST$_GET为空。

如何在PHP中检索它?

2个回答

286

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

你可以使用以下代码片段获取这些数据:

$request_body = file_get_contents('php://input');
如果你正在传递JSON,那么你可以这样做:
$data = json_decode($request_body);

$data 包含 PHP 数组格式的 JSON 数据。

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
7
非常感谢!我已经搜索了几天,本以为自己疯了,现在终于找到了答案。请问还有其他需要帮忙的吗? - Zacho
标题为application/json - Angelin Nadar
@AngelinNadar 那么这个答案适用。 - Ikke
如果使用Laravel,只需创建一个帮助函数,该函数1.检索此字符串并2.将其json解码。 然后它与Input :: all()中的数组没有任何区别; 顺便说一句,这对其他人也可能有效。 - Michael J. Calkins
你让我开心极了!我一直在苦苦挣扎js+php!非常感谢你。抱歉有点跑题。 - tibalt

12
同时,您可以使用带有encode:truewriter来设置extJs,并定期发送数据(因此,您将能够通过 $ _POST 和 $ _GET 检索数据)。
  

...值将作为请求参数的一部分发送,而不是作为原始帖子(通过文档进行编码配置的说明config of Ext.data.writer.Json)

更新

还有文档中提到:

  

仅在定义根目录时应将“ encode”选项设置为true

因此,可能需要writerroot配置。


@NikitaKuhta,你设置了writer的根配置吗?这可能是必需的。对我来说,encode可以工作。http://imageshack.us/f/32/20120308153201.png/ - Molecular Man

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接