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

求助:JQuery.post无法向PHP文件传递变量的原因排查

问题原因分析

我来帮你拆解下这个问题的核心,其实是你混淆了服务器端初始渲染和客户端AJAX异步请求的执行顺序:

  • 当浏览器加载页面时,服务器会先跑完所有PHP代码:包括include 'listGen.php'; echo $viewwidth;这部分。此时客户端的JavaScript还没开始运行,更没有发送AJAX请求,所以$_POST['vwWid']根本不存在,$viewwidth就被设为默认值1200,这个值会直接输出到页面的div里,页面渲染完成后这个值就固定了。
  • 你写的$.post确实把vwWid传给了listGen.php,但这个请求是异步的,而且你没有处理请求的返回结果,也没用来更新页面上已经显示的1200。
修复方案

我们需要调整两个部分:让listGen.php返回处理后的宽度值,再通过AJAX回调更新页面内容。

1. 修改listGen.php

让它直接输出最终的宽度值,方便AJAX接收响应:

<?php
if (isset($_POST['vwWid'])){
    $viewwidth = $_POST['vwWid'];
} else {
    $viewwidth = 1200;
}
// 直接输出值作为AJAX响应
echo $viewwidth;
?>

2. 调整前端AJAX代码

添加回调函数,接收服务器返回的值并更新页面:

<script type="text/javascript" src="../jquery.min.js"></script>
<script type="text/javascript">
function vwidth(){
    var vwWidth = window.innerWidth;
    document.getElementById('printVar').innerHTML = vwWidth; // 测试用的正常显示
    
    // 给$.post添加done回调,处理返回结果
    $.post( "listGen.php", {vwWid: vwWidth})
    .done(function(response) {
        // 更新显示PHP处理后结果的div
        document.getElementById('phpResult').innerHTML = response;
    });
}
</script>
<body onLoad="vwidth()" onResize="vwidth()">
<div id="printVar"></div>
<!-- 给这个div加id,方便JS定位更新 -->
<div id="phpResult"></div>
</body>
额外说明

服务器端PHP代码是在页面发送给浏览器之前执行的,客户端JS则是页面加载到浏览器后才运行,这两个阶段完全独立——AJAX请求无法改变已经完成的初始PHP渲染结果,只能通过JS动态修改页面DOM。如果你的实际场景不需要PHP处理宽度值,其实直接用JS显示宽度就够了,不用绕PHP~

内容的提问来源于stack exchange,提问作者Cam Acc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:13:59