0

我目前有这个代码和两个问题:

我使用 Javascript 获取用户时区并通过 ajax 将其发布到 timezone.php,该 ajax 使用用户时间设置 cookie。如果未设置 cookie,例如在第一次访问时,则必须刷新页面才能显示 cookie 值。我目前正在使用 javascript 执行此操作,但必须有另一种方式。此外,由于如果没有 cookie,页面会刷新,禁用 cookie 的用户将获得刷新循环。

关于如何解决这些问题的任何建议?

谢谢你,马库斯


索引.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>

时区.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);
}

?>
4

4 回答 4

1

用 JavaScript 设置类,不需要服务器。

于 2012-11-10T23:43:21.710 回答
1

您可以使用 JQuery 插件https://github.com/carhartl/jquery-cookie并检查 cookie 是否设置在您的 $.post 方法中

 $.post('timezone.php',{timezone: timezone}, function(data){
     if ($.cookie("time") != null) 
         location.reload(true);
});
于 2012-11-10T23:43:25.557 回答
0

PHP 脚本仅在向服务器发出请求时运行。您可以使用 JS 和 AJAX,或者,如果合适,可以使用 iframe。

于 2012-11-10T23:41:35.123 回答
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";
}

?>
于 2012-11-10T23:56:22.890 回答