我目前有这个代码和两个问题:
我使用Javascript获取用户时区并通过ajax将其发布到timezone.php,后者根据用户时间设置cookie。如果没有设置cookie,比如第一次访问时,必须刷新页面才能显示cookie值。我现在用javascript做这个,但必须有另一种方式。此外,由于如果没有cookie,页面会刷新,禁用cookie的用户将获得刷新循环。
有关如何解决这些问题的任何建议?
谢谢你, 马库斯
的index.php:
<!DOCTYPE html>
<html>
<head>
<style>
.night {
background: #000;
color: #fff;
}
</style>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<?php
if(isset($_COOKIE["time"])) {
$time = $_COOKIE["time"];
if($time < 5.5 || $time > 19) {
$night = true;
}
} else {
echo("
<script>
var timezone = new Date().getTimezoneOffset()/60;
$(document).ready(function() {
$.post('timezone.php',{timezone: timezone}, function(data){location.reload(true)});
});
</script>
");
}
?>
</head>
<body class="<?php echo $night ? "night" : "day"; ?>">
<?php if($night) {
echo "It's nighttime! ($time)";
} else {
echo "It's daytime! ($time)";
} ?>
</body>
</html>
timezone.php:
<?php
$timezone = $_POST["timezone"];
if(isset($timezone)) {
date_default_timezone_set('Etc/GMT'.($timezone <= 0 ? '' : '+').$timezone);
$time = date("G") + (date("i")/60);
setcookie("time", $time);
}
?>
答案 0 :(得分:1)
使用JavaScript设置类,不需要服务器。
答案 1 :(得分:1)
你可以使用JQuery插件https://github.com/carhartl/jquery-cookie并检查你的$ .post方法中是否设置了cookie
$.post('timezone.php',{timezone: timezone}, function(data){
if ($.cookie("time") != null)
location.reload(true);
});
答案 2 :(得分:0)
PHP脚本仅在向服务器发出请求时运行。您可以使用JS和AJAX,或者,如果合适,可以使用iframe。
答案 3 :(得分:0)
你可以改变index.php:
$.post('timezone.php',{timezone: timezone}, function(data){
if(data=='success'){
location.reload(true)
}
});
和timezone.php:
<?php
$timezone = $_POST["timezone"];
if(isset($timezone)) {
date_default_timezone_set('Etc/GMT'.($timezone <= 0 ? '' : '+').$timezone);
$time = date("G") + (date("i")/60);
setcookie("time", $time);
echo "success";
}
?>