JQuery POST请求至PHP文件,$_POST返回空数组问题求助
问题分析:jQuery POST请求后PHP的$_POST为空的原因与解决办法
看起来你遇到了jQuery POST请求后PHP端$_POST为空的问题,我来帮你拆解下核心问题和对应的解决方法:
核心问题所在
你的代码里有两个关键问题导致$_POST返回空数组:
- 数据格式与
contentType不匹配
你设置了contentType: "application/json; charset=utf-8",但发送的data只是单纯的字符串sha_id,并非标准JSON对象。而且PHP的$_POST全局变量默认只解析application/x-www-form-urlencoded(表单默认编码)或multipart/form-data格式的请求体,不会自动处理JSON格式的输入内容。 - 未传递键值对结构
即便不用JSON格式,直接传递无键名的字符串,PHP也无法将其映射到$_POST数组中。
两种可行的解决方法
方法一:使用JSON格式发送(适合复杂数据结构)
如果你希望保持JSON格式传递数据,需要同时修改发送端和接收端代码:
- 发送端:将数据包装为JSON对象并序列化
$(function (){ $(".commit").click(function(){ const sha_id = $(this).data("sha"); $.ajax({ url : 'commitInfo.php', type : 'POST', data : JSON.stringify({ sha_id: sha_id }), // 包装为JSON对象并序列化 contentType: "application/json; charset=utf-8", success: function(response){ console.log(sha_id); window.location.replace("commitInfo"); } }); }); });
- 接收端:读取原始请求体并解析JSON
$rawInput = file_get_contents('php://input'); $postData = json_decode($rawInput, true); var_dump($postData); // 此时会输出包含sha_id的数组
方法二:使用默认表单编码(更简单,适合单参数场景)
这种方式更贴合PHP$_POST的默认解析逻辑,修改成本更低:
- 发送端:移除
contentType设置(jQuery默认使用表单编码),并传递键值对形式的数据
$(function (){ $(".commit").click(function(){ const sha_id = $(this).data("sha"); $.ajax({ url : 'commitInfo.php', type : 'POST', data : { sha_id: sha_id }, // 键值对结构 success: function(response){ console.log(sha_id); window.location.replace("commitInfo"); } }); }); });
- 接收端:直接使用
$_POST即可
var_dump($_POST); // 现在会输出包含sha_id的数组 // 也可以直接获取具体值:echo $_POST['sha_id'];
额外提示
注意你在success回调里的跳转window.location.replace("commitInfo");——这个跳转是一个全新的HTTP请求,和之前的ajax POST请求完全独立,所以跳转后的页面无法通过$_POST获取刚才传递的sha_id。如果跳转后需要用到这个值,建议改成GET参数传递:
window.location.replace("commitInfo?sha_id=" + sha_id);
之后在跳转后的页面用$_GET['sha_id']就能获取到对应值。
内容的提问来源于stack exchange,提问作者kpo1
相关产品推荐
相关产品推荐

