我有一个关于javascript / php cron问题的问题。它本身不是问题,但在我的情况下它是。 我有以下javascript设置cookie并倒计时到该cookie的结束时间。在我的情况下它10分钟。 我还有一个每10分钟运行一次的cron文件。 我想将倒计时与cron文件同步。
当我从页面调用它时,下面的脚本运行良好,但它从用户访问页面开始倒计时,并且与运行的cron文件不同步。
我知道这不是一个php问题,但显示脚本的页面是php。
对我来说有什么指示? 非常感谢帮助。 谢谢你的阅读。
我所有的都在下面。
<div id="countre4">
<script type="text/javascript">
function setCookie(c_name, value)
{
var exdate = new Date();
exdate.setDate(exdate.getDate() + 14);
var c_value = escape(value) + "; expires=" + exdate.toUTCString();
document.cookie = c_name + "=" + c_value;
}
function mycountre(countdownId, countdownTarget, countdownSeconds, countdownLooping){
var countre = document.getElementById(countdownId); // get html element
if (!countre) {
return;
}
var target = countdownTarget; // target time
var intervalId; // id of the interval
setCookie("time", target);
// update function
function updatecountre(){
var time = Math.floor((target - new Date().getTime()) / 1000); // countdown time in seconds
if (time < 0) { // if countdown ends
if (countdownLooping) { // if it should loop
target += 1000 * countdownSeconds; // set new target time
time = Math.floor((target - new Date().getTime()) / 1000); // recalculate current time
setCookie("time", target);
} else { // otherwise
clearInterval(intervalId); // clear interval
time = 0; // set time to 0 to avoid displaying negative values
}
}
// split time to seconds, minutes and hours
var seconds = '0' + (time % 60);
time = (time - seconds) / 60;
var minutes = '0' + (time % 60);
time = (time - minutes) / 60;
var hours = '0' + time;
// make string from splited values
var str = hours.substring(hours.length - 2) + ':' + minutes.substring(minutes.length - 2) + ':' + seconds.substring(seconds.length - 2);
countre.innerHTML = str;
}
intervalId = setInterval(updatecountre, 200); // start interval to execute update function periodically
};
var parts = document.cookie.split(';');
var cookie = new Date().getTime() + 1000 * 15 * 60;
for (var i = 0; i < parts.length; ++i) {
if (parts[i].trim().indexOf('time') == 0) {
var value = parts[i].trim().split('=');
cookie = parseInt(value[1]);
}
}
mycountre(
'countre4', // id of the html element
cookie,
10 * 60, // time in seconds (10min here)
true // loop after countdown ends?
);
</script>
</div>
答案 0 :(得分:2)
也许你应该重新考虑你的方法。不要将cookie用于实际存储在服务器上的信息。
如果不是cookie,每个PHP页面只是设置一个全局JS变量来表示你剩下多少时间。有点像这样:
<script>
var timeLeft = <? echo $timeLeftInMilliseconds ?>;
startCounter(timeleft);
</script>
然后你的计数器脚本可以读取它并相应地为计数器设置动画。这使得服务器端代码能够在下一个cron发生时准确传递。