我尝试编写一个代码,该代码每天会在23:00向此网址{ url: "addCredits.php" }
发出AJAX请求。在这个URL上有一个SQL代码,用于向" Credit"添加+5。使用PHP的列。我希望每个用户在" Credit"中获得+5。每天一栏。
我尝试运行下面的代码,但是在23:00,用户没有收到任何信用。
<script>
function startTime() {
// set time variables h=hour, m=minute, s=second
var today = new Date();
var h = today.getHours();
var m = today.getMinutes();
var s = today.getSeconds();
//check if 0's have to be added for better appearance. no logical use!
m = checkTime(m);
s = checkTime(s);
//display current time on the element with id="txt"
document.getElementById('txt').innerHTML =
h + ":" + m + ":" + s;
//check if its 23:00:00 ... if so call addCredits.php
if(h == 23 && m == 00 && s == 00) {
$.ajax({url: "addCredits.php"});
}
//restart this function every second to update the clock
var t = setTimeout(startTime, 1000);
}
function checkTime(i) {
if (i < 10) {i = "0" + i}; // add zero in front of numbers < 10
return i;
}
</script>
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body onload="startTime()">
<div id="txt"></div>
</body>
</html>
答案 0 :(得分:2)
我在这里看到了几个问题。
您确定您的用户实际拥有此页面并且在23:00:00运行吗?如果页面显然没有打开,它将无法工作。
getHours
(等)在用户的本地时区给出时间。不同时区的用户在不同时间都会有这种情况。
您使用的条件 - h == 23 && m == 00 && s == 00
- 仅在定时器在23:00:00和23:00:01之间触发时才会生效。由于您使用的是1000毫秒计时器,并且JS计时器无法在确切的请求时间间隔内启动,因此某些用户最终可能会跳过&#34;跳过&#34;如果计时器在比例为22:59:59.99和23:00:01.00时触发的条件。
最重要的是,但是:使用客户端逻辑是完全不安全的。任何用户都可以随时多次请求addCredits.php
;它通常通过此Javascript请求的事实不会阻止它们以其他方式运行它。如果您想定期为用户提供信用,请使用服务器端计划任务来执行此操作。