如何通过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里,这里有两个核心问题:
- PHP是服务器端语言,页面第一次加载时就执行完了,这时候JS还没运行,根本发不出AJAX请求,所以初始加载的PHP拿不到参数
- 当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
相关产品推荐
相关产品推荐

