Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在不刷新页面的情况下获取php中的cookie?_Php_Javascript_Ajax_Cookies_Time - Fatal编程技术网

如何在不刷新页面的情况下获取php中的cookie?

如何在不刷新页面的情况下获取php中的cookie?,php,javascript,ajax,cookies,time,Php,Javascript,Ajax,Cookies,Time,我目前有此代码和两个问题: 我使用Javascript获取用户的时区,并通过ajax将其发布到timezone.php,后者将用户的时间设置为cookie。如果没有设置cookie,比如说在第一次访问时,页面必须刷新以显示cookie值。我现在正在用javascript做这件事,但必须有另一种方法。此外,由于页面在没有cookie时会刷新,禁用cookie的用户将获得刷新循环 对如何解决这些问题有什么建议吗 谢谢,, 马库斯 index.php: <!DOCTYPE html> &

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

我使用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>
<?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);
}

?>

.晚上{
背景:#000;
颜色:#fff;
}

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

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

您可以使用JQuery插件并检查cookie是否在$.post方法中设置

 $.post('timezone.php',{timezone: timezone}, function(data){
     if ($.cookie("time") != null) 
         location.reload(true);
});

您可以更改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";
}

?>


我可以,但是一旦设置了cookie,如果在服务器上这样做,性能不是更好吗?另外,当使用PHP时,我只需要在会话中根据Javascript请求一次时区。您不能做一些类似于向当前文件(在本例中为index.PHP)发布参数的事情吗?好的,这是否意味着如果设置了cookie,它只会回显“成功”?如果请求不返回“success”,这意味着从用户获取时区时出错,您可以尝试获取agian或执行其他操作:if(data='success'){location.reload(true)}else{//设置时区未成功,我们将尝试重新设置时区或将用户重定向到允许选择时区的其他页面}但是时区与cookie没有任何关系。我只是不想在没有设置cookie的情况下创建刷新循环。是的,我们有两件事:+第一件事是在cookie中设置了时区。这没问题。+第二件事是当cookie中没有设置时区时,您可以发出警报或执行其他操作,它永远不会循环,因为我们只调用aj斧头1次。