小程序发起http网络请求,通过wx.request函数的调用。该函数接收一个对象,可以在对象里配置包括地址、header、method等。method默认为post请求。但是,我们在服务器端使用$_POST或框架如Phalcon里的$this->request->getPost()等获取参数时,取得结果为空。但是通过流获取:
$params = file_get_contents('php://input')
Phalcon里通过:
$params = $this->request->getJsonRawBody();
这样是能够得到参数的。为什么POST请求,却不能在POST里得到呢?我们注意看文档,会发现此时的header里content-type为application/json(默认方式),再查看PHP的文档,可以看到:
当 HTTP POST 请求的 Content-Type 是 application/x-www-form-urlencoded 或 multipart/form-data 时,会将变量以关联数组形式传入当前脚本。
也就是说,我们需要重新设置小程序的header头里的content-type为application/x-www-form-urlencoded,就可以获取POST里的参数了。