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

无需表单点击链接传JS变量到另一页PHP时$_POST为空问题

你编写的Ajax代码本身语法没有问题,POST的data字段传输逻辑是正确的,问题出在请求流程的逻辑不符合你的需求。

核心问题原因

你当前的操作触发了两次独立的页面请求:

  1. 点击超链接时首先触发你绑定的click事件,Ajax异步向profile.php发送了一次携带参数的POST请求,这次请求的参数是正常的,但返回结果只会进入Ajax的success回调,不会更新浏览器当前页面
  2. 超链接的默认跳转行为没有被阻止,浏览器随后发起了第二次无参数的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:15:03