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

使用JavaScript发送JSON至PHP时$_POST接收为空问题求助

解决发送JSON到PHP时$_POST返回null的问题

我之前也踩过一模一样的坑!跟W3Schools的示例流程类似但死活拿不到数据,折腾了好一阵才理清问题所在,咱们一步步排查:

1. 没设置正确的请求头

发送JSON数据时,必须明确告诉服务器你传递的是JSON格式——否则PHP会默认按表单编码规则解析,自然读不到$_POST数据。在JS发起请求时一定要加上这个关键请求头:

用XMLHttpRequest的示例:

const xhr = new XMLHttpRequest();
xhr.open('POST', 'your-php-file.php', true);
// 核心:设置Content-Type为application/json
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.onload = function() {
  // 处理服务器响应
};
// 把你的变量序列化为标准JSON字符串
const sendData = JSON.stringify({ username: 'test', content: '我的测试数据' });
xhr.send(sendData);

用Fetch API的示例:

fetch('your-php-file.php', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json', // 必须添加这个头
  },
  body: JSON.stringify({ key: '你要传递的变量值' })
})
.then(res => res.json())
.then(result => console.log(result));

2. PHP不能直接用$_POST获取JSON

当请求是Raw JSON格式时,PHP的$_POST数组会是空的——因为它只负责解析application/x-www-form-urlencoded或multipart/form-data类型的请求数据。你需要读取原始请求体,再手动解析成JSON:

// 获取原始的JSON请求内容
$rawJson = file_get_contents('php://input');
// 解析为关联数组(第二个参数传true,否则返回对象)
$decodedData = json_decode($rawJson, true);

// 现在就能正常访问数据了
if ($decodedData) {
  echo $decodedData['username']; // 输出test
} else {
  // 处理JSON解析失败的情况
  echo 'JSON格式错误,请检查发送的数据';
}

3. 确认JSON序列化是否正确

一定要用JSON.stringify()把JS对象/变量转换成标准JSON字符串,不要直接传递对象——如果直接传对象,发送的会是[object Object]这样的无效字符串,PHP根本无法解析。

为什么W3Schools的示例能用$_POST?

那个示例大概率是用表单提交(或模拟表单编码的AJAX),请求头是application/x-www-form-urlencoded,这种场景下PHP会自动把数据解析到$_POST数组里,和你发送Raw JSON的场景完全不同哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:48:33