2012-03-07 108 views
90

我使用PHP ExtJS的阿贾克斯店如何检索请求负载

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

如何检索它在PHP中?

回答

194

如果我正确理解这种情况,那么您只是通过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是所谓的wrapper

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

+1

我可以检索数据。谢谢。 ! – 2012-03-08 12:50:28

+5

非常感谢!我一直在寻找这个答案几天,并认为我疯了。 – Zacho 2012-08-11 20:32:30

+0

标题是application/json – 2012-12-17 10:08:05

9

您也可以设置ExtJS的writerencode: true,它会定期发送数据(和,因此,您将能够通过$_POST$_GET检索数据)。

...的值将被发送作为请求的参数作为 (经由docs为Ext.data.writer.Json的编码配置)相对于一个原始post

UPDATE的一部分

而且docs说:

的编码选项应仅设置为true当根被定义

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

+0

encode:true - 没有任何变化。相同的发送方法。 – 2012-03-08 12:46:03

+0

@NikitaKuhta,你有没有设置'作家'的根配置?它可能是必需的。 'encode'对我很有用http://imageshack.us/f/32/20120308153201.png/ – 2012-03-08 13:46:21