首先,PHP 发生在服务器端,因此一旦页面加载,再次使用 PHP(不加载页面)的唯一方法是进行 ajax 调用,大概是对另一个执行特定功能并返回值的 php 页面。
如果要将值存储为会话变量以便可以连续使用,可以执行以下操作:
- 当他们第一次登陆您的网站时,有 php 检查会话是否存在,如果它不存在,则调用 Javascript 函数以获取 layoutWidth 并对 php 页面进行 ajax 调用,该页面将其存储为会话变量,然后重新加载页面并包含正确的布局文件。
我可能不会使用这种方法,实际上会寻找使用 JavaScript/JQuery 来实现这一点的方法。但这就是你要求这样做的方式。
对于您的示例,我根本没有使用过 JQuery,但我希望包含的内容只有大约 19kb 左右,它让生活变得如此轻松。
例子:
索引.php
<?php
session_start();
?>
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<?php
if (empty($_SESSION['layoutWidth'])) {
echo '<script type="text/javascript"> var session=false; var layoutWidth;</script>';
} else {
echo '<script type="text/javascript"> var session=true; var layoutWidth=' . $_SESSION['layoutWidth'] . ';</script>';
}
?>
<script type="text/javascript" src="js/viewport.js"></script>
</head>
<body>
<?php
if (!empty($_SESSION['layoutWidth'])) {
$layoutWidth = $_SESSION['layoutWidth'];
if ( $layoutWidth >= 240 && $layoutWidth <= 900 ) {
include('layout1.php');
} else if ($layoutWidth > 900 && $layoutWidth <= 1200 ) {
include('layout2.php');
} else {
include('layout3.php');
}
}
?>
</body>
</html>
js/viewport.js
// JavaScript Document
window.onload = function() {
// if there is no session (session = false)
if (!session) {
// call function to get the screen size
getScreenWidth();
// make ajax call to php page to set the session variable
setSession();
}
}
function getScreenWidth() {
layoutWidth = screen.width;
}
function setSession() {
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
// Reload the page
window.location.reload();
}
}
xmlhttp.open("POST","set_session.php?layoutWidth=" + layoutWidth,true);
xmlhttp.send();
}
您的 php 文件来设置会话参数是从您的 ajax 调用传递的:
set_session.php
<?php
session_start();
// you can check if it is already set if you like otherwise:
$_SESSION['layoutWidth'] = $_REQUEST['layoutWidth'];
?>
布局1.php
<?php
echo '<div>This is layout1.php</div>';
echo '<div>Your screen width is: ' . $_SESSION['layoutWidth'] . '</div>';
?>
布局2.php
<?php
echo '<div>This is layout2.php</div>';
echo '<div>Your screen width is: ' . $_SESSION['layoutWidth'] . '</div>';
?>
布局3.php
<?php
echo '<div>This is layout3.php</div>';
echo '<div>Your screen width is: ' . $_SESSION['layoutWidth'] . '</div>';
?>
这种方法意味着您不必在 URL 中传递参数。这一切都会被隐藏起来。