PHP无法获取jQuery Ajax POST提交的参数值问题求助
核心问题
你混淆了PHP和JavaScript的执行时机:PHP是服务端预执行语言,在页面首次加载渲染时就会全部执行完成,不会等待前端JavaScript发起Ajax请求后再二次运行。你写在JS success回调里的PHP代码,在页面第一次打开的时候就已经跑完了,这时候Ajax请求还没发出去,$_POST里根本不存在id_person参数,自然拿不到值。
错误点梳理
- 接收Ajax POST参数的后端逻辑写错了位置:这部分代码应该写在Ajax请求的目标文件
config.php里,而不是嵌在前端页面的JS代码块中 - 你在success回调里能拿到的
result变量,才是后端config.php接收参数、处理完逻辑后返回给前端的结果,不需要在回调里再写PHP读$_POST - 你当前代码里嵌在success回调里的
$aux = $_POST['id_person']是页面初始加载时执行的,这时候没有对应POST数据,会直接报PHP未定义索引的警告
修正步骤
1. 修改后端接收文件config.php
这个文件专门负责处理Ajax提交的POST参数,处理完逻辑后直接把结果输出给前端,不要输出多余内容:
<?php // 先校验参数是否存在 if (isset($_POST['id_person']) && is_numeric($_POST['id_person'])) { $id_person = intval($_POST['id_person']); // 这里写你的业务逻辑,比如删除对应人员的数据库操作 // 处理完成后直接输出要返回给前端的值 echo $id_person; exit; // 必须加终止,避免返回多余空白、其他HTML内容干扰前端接收 } // 如果参数不存在可以返回错误标识 echo "参数错误"; exit; ?>
2. 修改前端Ajax代码
删掉回调里冗余的PHP代码,直接使用后端返回的result即可:
<script type="text/javascript"> function deletarPerson(id_person) { let pag = "<?php echo plugin_dir_url(__DIR__) . 'admin/'; ?>"; jQuery.ajax({ url: pag + "/config.php", method: "post", data: { id_person: id_person }, dataType: "html", success: function(result) { // 直接使用后端返回的结果,trim去掉可能存在的多余空白 alert(result.trim()); } }) } </script>
额外注意
- 永远不要在前端JS代码块里写PHP代码来接收Ajax提交的参数,PHP只会在服务端运行,前端触发Ajax时不会重新执行页面里的PHP
- 如果后续需要返回多组数据,可以把Ajax的
dataType改成json,后端用echo json_encode(['code'=>0, 'msg'=>'删除成功', 'id'=>$id_person])返回,前端就能直接拿到结构化的对象数据 - 接收POST参数建议先做合法性校验,比如上面代码里的类型判断、转整数,避免SQL注入等安全问题
内容的提问来源于stack exchange,提问作者Rodrigo Franco
相关产品推荐
相关产品推荐

