You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:33:44