如何使用jquery/javascript每秒更新PHP当前时间戳

How to update the PHP current timestamp using jquery/javascript every second

本文关键字:PHP 更新 时间戳 何使用 jquery javascript      更新时间:2023-09-26

我正在使用PHP和jQuery/JavaScript编写PHP购物车计时器脚本。

我每秒钟迭代一次set-interval函数以获得PHP的当前时间戳。

当第一个产品添加到购物车时,计时器开始,然后计时器停止,提示用户是继续还是取消。

我的代码如下

$(document).ready(function(){
    var orderedtime = "echo $_SESSION['ordertime'];";
    if (orderedtime === null || orderedtime == ''){
       console.log("orderedtime is not set");
    }
    else{
       init();
   }
});
var currenttime;
var alerttime;
var extratime;
function cd(){
    alerttime = "<?php echo date('h:i:s', (strtotime($_SESSION['ordertime']) + (1 * 60)));  ?>"
    extratime = "<?php echo date('h:i:s', (strtotime($_SESSION['ordertime']) + (2 * 60)));  ?>";
    redo();
}
function redo(){
    currenttime = "<?php echo date('h:i:s', time()); ?>";
    if(alerttime == currenttime) {
        //doing something   
    }
    else if(currenttime == extratime){
        //doing something
    }
    else{
        cd = setTimeout("redo()",1000);
    }
}
function init(){
    cd();
}

只存储第一次迭代值的currenttime变量没有得到更新。

如何解决这个问题?

请帮助我解决这个问题。

提前感谢。

在setTimeout循环中,您实际上并没有从服务器请求时间。

这条线

currenttime = "<?php echo date('h:i:s', time()); ?>";

在第一次生成页面时设置,并且不会再次更改。如果您希望更新时间,则需要向服务器发送请求。但这可能不是最好的方法。

除了MikeW出色但不完整的答案之外,您还需要一种从服务器请求时间并在DOM中接收它的方法。

只有一种方法:AJAX

正如Mike指出的那样,您在上面键入的PHP代码只运行一次:当页面第一次生成时。在页面生成并且文档"就绪"之后,必须使用AJAX。

下面是一个完整的,可复制/粘贴的示例,以演示如何工作

注意,我必须重写orderedtime变量,因为我不知道如何/何时设置它。

HTML/javascript side: index.php

<html>
    <head>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
        <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.9.1/jquery-ui.min.js"></script>
        <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.1/themes/base/jquery-ui.css" />
        <style>
            #timeDiv{width:40%;height:200px;background:wheat;padding:10px;}
        </style>
        <script type="text/javascript">
            $(document).ready(function() {
                //var orderedtime = "<?php echo $_SESSION['ordertime']; ?>";
                var orderedtime = '';
                if (orderedtime === null || orderedtime == ''){
                   console.log("orderedtime is not set");
                }else{
                    doAjax();
                }
                window.setInterval(function(){
                    doAjax();
                },2000);
            }); //END document.ready
            function doAjax() {
                $.ajax({
                    type: "POST",
                    url: "get_the_time.php",
                    data: "ordertime=" + orderedtime,
                    success: function(myData) {
                        $('#thetime').html(myData);
                    }
                });
            }
        </script>
    </head>
<body>
    <div id="timeDiv">
        The time is: <span id="thetime"></span>
    </div>
</body>
</html>

PHP端:get_the_time.php
<?php
if (isset($_POST['ordertime']) != true) {
    $d = date("h:i:s");
}else{
    $ot = $_POST['ordertime'];
    $d = date('h:i:s', (strtotime($ot) + (1 * 60)));
}
echo $d;

当使用AJAX时,从服务器发送的响应在success:函数内接收,而不是其他地方

如果您以后希望使用该数据,则将其赋值给success函数中的变量将不起作用。我发现最好的方法是将接收到的数据粘贴到某种元素中(隐藏的输入字段非常适合此操作),然后在需要时从那里检索它。

例如:

<input type="hidden" id="myHiddenField" />
$.ajax({
    type: "POST",
    url: "get_the_time.php",
    data: "ordertime=" + orderedtime,
    success: function(myData) {
        $('#thetime').html(myData);
        $('#myHiddenField').val(myData);
    }
});
然后,在其他javascript函数中,您可以获取该数据并将其分配给某个变量,例如:
var someVar = $('#myHiddenField').val();

希望这能帮到你,虽然很晚了。


这个stackoverflow post有关于AJAX的进一步信息/解释。查看底部的简化AJAX示例。