使用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
相关产品推荐
相关产品推荐

