Vue Resource请求PHP时$_POST为空,求排查错误原因
解决Vue $http.post请求后PHP $_POST为空的问题
这个问题我碰到过好多次啦,核心原因就是请求数据的格式和PHP默认解析的格式不匹配:
Vue的$http.post(应该是用的vue-resource吧?)默认会把你的数据以JSON格式发送,请求头里的Content-Type会被设为application/json。但PHP的$_POST超级全局变量只认两种格式的请求体:application/x-www-form-urlencoded(普通表单提交)和multipart/form-data(文件上传),JSON格式的数据根本不会被自动解析到$_POST里,所以你打印出来才是空的。
给你两种解决办法,选哪种都可以:
办法一:让Vue发送表单格式的数据
修改你的请求代码,把数据转换成表单格式,并设置对应的请求头:
methods: { onSubmit () { if (this.valid) { // 把JSON数据转成表单格式的键值对 const formData = new URLSearchParams(); formData.append('test', 'test'); this.$http.post('http://remindwordserver.loc/register.php', formData, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }).then(response => { console.log(response.body) }, response => {}) } } },
这样修改后,PHP的$_POST就能正常获取到test的值了,你再print_r($_POST)就能看到预期的结果。
办法二:在PHP里直接读取JSON请求体
如果不想改动Vue的请求逻辑,那就在PHP端做适配,直接读取原始的请求数据并解析成JSON:
<?php // 读取原始的请求体内容 $rawRequest = file_get_contents('php://input'); // 把JSON字符串转成关联数组 $requestData = json_decode($rawRequest, true); // 打印解析后的数据 print_r($requestData); ?>
这样不管Vue发的是JSON还是其他格式,你都能拿到完整的请求数据啦。
另外提一句,如果你的项目后来换成了更常用的axios,默认也是发送JSON格式,解决思路和上面完全一样,不用担心~
内容的提问来源于stack exchange,提问作者Hnatyuk Roma
相关产品推荐
相关产品推荐

