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

Node.js中Axios发送POST请求未携带请求体的问题

Axios发送POST请求PHP无法获取$_POST数据的原因及解决办法

你遇到的问题核心在于Axios和jQuery发送请求的Content-Type格式不一致,导致PHP解析请求体的方式不同:

  • Axios默认会将请求体序列化为JSON格式,请求头Content-Type设为application/json,但PHP的$_POST数组只会自动解析application/x-www-form-urlencoded或multipart/form-data格式的数据,所以直接用$_POST['subject']会返回null。
  • jQuery的$.ajax默认会把data对象转换为application/x-www-form-urlencoded格式的键值对(比如emailto=xxx&toname=xxx),这种格式会被PHP自动解析到$_POST中,因此能正常获取数据。

下面提供两种解决办法:

方法一:让Axios发送urlencoded格式数据(与jQuery一致)

方式1:使用URLSearchParams构造请求体

修改Axios代码,直接用URLSearchParams拼接参数,Axios会自动设置正确的请求头:

const axios = require("axios").default;

const params = new URLSearchParams();
params.append('emailto', 'receiver email');
params.append('toname', 'name');
params.append('emailfrom', 'sender email');
params.append('fromname', 'name');
params.append('subject', 'subject');
params.append('messagebody', 'hello world');

axios.post("my url goes here/email.php", params);

方式2:用qs库序列化复杂对象

如果请求体包含嵌套对象等复杂结构,推荐使用qs库序列化:

  1. 先安装依赖:npm install qs
  2. 修改代码:
const axios = require("axios").default;
const qs = require('qs');

axios.post("my url goes here/email.php", qs.stringify({
  emailto: "receiver email",
  toname: "name",
  emailfrom: "sender email",
  fromname: "name",
  subject: "subject",
  messagebody: "hello world"
}));

方法二:PHP端直接解析JSON请求体

如果不想修改Axios的请求格式,PHP可以读取原始请求体并解析为数组:

$rawBody = file_get_contents('php://input');
$data = json_decode($rawBody, true);
$subject = $data['subject']; // 正常获取数据

注:json_decode的第二个参数设为true,会将JSON对象转换为PHP关联数组,使用方式和$_POST一致。

内容的提问来源于stack exchange,提问作者Krokodil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:09:20