如何使用jquery/javascript每秒更新PHP当前时间戳
How to update the PHP current timestamp using jquery/javascript every second
我正在使用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示例。
- 使用PHP更新external.js中的Javascript变量
- 如何使用 PHP 更新 JSON 文件中的值
- 如何使用PHP更新JavaScript变量
- 从javascript运行php更新文件
- 使用 PHP 更新网页的一部分
- 使用模态使用 php 更新查询
- 使用 ajax 函数触发的 php 更新数据库
- 尝试使用 mysql 和 php 更新 jquery 变量
- 使用 PHP 更新 SQL 数据库
- Javascript PHP更新所有打开的实例,如Facebook
- PHP更新单元格数据错误
- 使用Ajax/PHP更新Javascript变量
- 如何让PHP更新javascript的冗长进程状态
- 尝试用javascript/PHP更新数据库不工作
- PHP 更新后 JS 警报不会触发
- 从PHP更新mysql的最后一行
- 使用PHP更新后,在数据库中插入错误格式的日期
- 当Javascript中的数组更新时,如何使用PHP更新和插入数据库
- 使用PHP更新数据库后的视图的ajax更新
- PHP -更新动态HTML表中的一行