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

如何通过XMLHttpRequest GET请求将JavaScript变量传递给PHP?

解决JS窗口尺寸传递到PHP的AJAX问题

先搞懂那行AJAX代码的作用

ajax.open("GET", 'footer.php?CONSTANT1='+CONSTANT1, true) 这行是创建一个异步GET请求:

  • 把JS里的CONSTANT1(也就是window.innerWidth)通过URL参数的方式传给footer.php
  • PHP端本可以通过$_GET['CONSTANT1']获取这个值,但你的写法有问题导致无效

为什么你的AJAX请求没效果

你把JS和PHP都放在同一个footer.php里,这里有两个核心问题:

  1. PHP是服务器端语言,页面第一次加载时就执行完了,这时候JS还没运行,根本发不出AJAX请求,所以初始加载的PHP拿不到参数
  2. 当AJAX请求footer.php时,返回的是整个文件的内容(包括所有JS和PHP代码),但你没处理响应,也没法修改当前页面已经执行完的PHP变量——AJAX是新的一次服务器请求,和当前页面的PHP上下文完全无关

可行解决方案

方案1:AJAX传参+PHP处理后返回结果

把footer.php里的PHP代码改成只处理AJAX请求的逻辑,避免返回整个页面内容:

<?php
// 判断是否是AJAX传参请求
if (isset($_GET['CONSTANT1'])) {
    // 可以把尺寸存到SESSION里,后续其他页面或刷新后能读取
    session_start();
    $_SESSION['window_width'] = $_GET['CONSTANT1'];
    $_SESSION['window_height'] = $_GET['CONSTANT2']; // 对应innerHeight

    // 返回成功标识,别输出其他内容
    echo "尺寸已接收";
    exit; // 必须退出,避免返回整个footer的HTML/JS代码
}
?>

然后修改JS的AJAX部分,加上响应处理:

function sendWindowSize() {
    const CONSTANT1 = window.innerWidth;
    const CONSTANT2 = window.innerHeight;
    const ajax = new XMLHttpRequest();
    
    // 监听请求状态变化
    ajax.onreadystatechange = function() {
        if (this.readyState === 4 && this.status === 200) {
            console.log(this.responseText); // 看到"尺寸已接收"就说明成功了
        }
    };

    ajax.open("GET", 'footer.php?CONSTANT1='+CONSTANT1+'&CONSTANT2='+CONSTANT2, true);
    ajax.send();
}

// 页面加载和窗口 resize 时都发送尺寸
window.addEventListener('load', sendWindowSize);
window.addEventListener('resize', sendWindowSize);

方案2:用Cookie传递(适合需要在页面加载后读取尺寸的场景)

如果需要当前页面刷新后PHP能拿到尺寸,可以用JS把尺寸存到Cookie,再让PHP读取:

// 页面加载和resize时更新Cookie
function setWindowSizeCookie() {
    document.cookie = `window_width=${window.innerWidth}; path=/`;
    document.cookie = `window_height=${window.innerHeight}; path=/`;
}
window.addEventListener('load', setWindowSizeCookie);
window.addEventListener('resize', setWindowSizeCookie);

PHP部分在footer.php里读取Cookie:

<?php
// 读取Cookie里的尺寸,没有就设默认值
$CONSTANT1 = isset($_COOKIE['window_width']) ? $_COOKIE['window_width'] : '未获取';
$window_height = isset($_COOKIE['window_height']) ? $_COOKIE['window_height'] : '未获取';
?>

注意:第一次加载页面时PHP拿不到值,刷新后才能读取到JS设置的Cookie。

核心知识点

PHP是服务器端语言,页面发送到浏览器前就执行完毕;JS是客户端语言,在浏览器里运行。两者不能直接互相赋值,必须通过HTTP请求(AJAX、表单提交)或Cookie这类客户端存储方式传递数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 18:05:13