无需表单点击链接传JS变量到另一页PHP时$_POST为空问题
你编写的Ajax代码本身语法没有问题,POST的data字段传输逻辑是正确的,问题出在请求流程的逻辑不符合你的需求。
核心问题原因
你当前的操作触发了两次独立的页面请求:
- 点击超链接时首先触发你绑定的click事件,Ajax异步向
profile.php发送了一次携带参数的POST请求,这次请求的参数是正常的,但返回结果只会进入Ajax的success回调,不会更新浏览器当前页面 - 超链接的默认跳转行为没有被阻止,浏览器随后发起了第二次无参数的GET请求加载
profile.php页面,你最终看到的就是这次GET请求的返回结果,自然$_POST为空。
推荐修复方案
方案1:直接用GET参数跳转(最适配你的场景)
你的需求就是点击后跳转到新页面展示数据,完全不需要用Ajax,直接把参数拼接在超链接URL里即可:
- 生成表格时,直接将第一列的超链接
href属性设置为:profile.php?playersName=你的昵称&playersSteamID=你的SteamID - PHP端改为用
$_GET接收参数:
<?php // 用null合并运算符避免未定义警告 $playersName = $_GET['playersName'] ?? ''; $playersSteamID = $_GET['playersSteamID'] ?? ''; var_dump($playersName); var_dump($playersSteamID); if (!empty($playersName) && !empty($playersSteamID)) { // 执行你的SQL查询等后续逻辑 } ?>
这个方案逻辑最简单,也符合常规页面跳转传参的使用习惯。
方案2:用POST跳转(适合不想参数暴露在URL的场景)
如果你坚持要用POST方式传参,可以抛弃Ajax,改用隐藏表单提交的方式实现跳转:
$(document).ready(function() { $('#playerList td').click(function(e) { e.preventDefault(); // 阻止超链接默认跳转行为 if ($(this).text() == $(this).closest('tr').children('td:first').text()) { var name = $(this).text(); var steamid = $(this).closest('tr').children('td:nth-child(2)').text(); // 创建隐藏表单提交 var tempForm = $('<form>', { action: 'profile.php', method: 'post', style: 'display: none' }); tempForm.append($('<input>', {name: 'playersName', value: name})); tempForm.append($('<input>', {name: 'playersSteamID', value: steamid})); $('body').append(tempForm); tempForm.submit(); } }); });
PHP端无需修改,直接用$_POST接收参数即可正常获取值。
内容的提问来源于stack exchange,提问作者bendy
相关产品推荐
相关产品推荐

