我正在开发一个网站,用户可以通过页面顶部的链接更新主题。免责声明:稍后我会用Javascript替换链接,但是现在我想要一个安全的备份,以防用户不支持Javascript。
我可以通过我的PHP获得显示的链接。它是<a href="?theme=dark">
,如果它是浅色主题,如果用户使用黑暗主题则显示为<a href="?theme=light">
。
但是,单击这些链接中的任何一个似乎只更新我的地址栏的浏览器,强制我手动刷新页面以更改主题。单击链接时页面不会重新加载,因此主题不会更改。它的行为类似于异步请求,但相关的更改都是嵌入在HTML中的PHP,因此它们在刷新之前不会发生。
我做错了吗?当我点击这些链接时,有没有办法强制页面重新加载?
感谢您提供的任何帮助!
编辑:这是当前的脚本:
<?php
if ($_GET["theme"]) {
$theme = $_GET["theme"];
setcookie("theme", $theme, time()+21*24*60*60);
}
else if (isset($_COOKIE["theme"]))
$theme = $_COOKIE["theme"];
else {
$theme = "light";
setcookie("theme", $theme, time()+21*24*60*60);
}
?>
<!DOCTYPE HTML>
<html>
<head>
<!-- head content... -->
</head>
<body id="<?php
echo $_COOKIE["theme"];
?>">
<div id="container">
<div id="header">
<a id="switch" href="?theme=<?php
if ($_COOKIE["theme"]=="light")
echo "dark";
else
echo "light";
?>">Lights</span>
</div>
<!-- Rest of page content -->
</div>
</body>
</html>
使用上面的代码点击链接会将我带到/index.php?theme= 主题,但我必须在更改保持之前刷新。没有从服务器加载新的html,因此正文ID不会改变。
Cookie保持不变。
P.S。就像我说我将使用Javascript制作异步版本,我只想首先支持没有启用它的用户。感谢。
答案 0 :(得分:3)
更改此行
<body id="<?php
echo $_COOKIE["theme"];
?>">
到这个
<body id="<?php
echo $theme;
?>">
和这个
if ($_COOKIE["theme"]=="light")
到这个
if ($theme=="light")
您的问题是,当您在当前页面加载中设置cookie时,在下一页加载之前它不可用。因此,为什么刷新似乎使其有效。