我尝试编写一段代码,每天 23:00 向此 URL { url: "addCredits.php"}
发出 AJAX 请求。在此 URL 中,存在用于使用 PHP 将 +5 添加到“Credit”列的 SQL 代码。我希望每个用户每天都能在“信用”栏中收到+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>
最佳答案
我在这里发现了一些问题。
您确定您的用户确实拥有此页面并在 23:00:00 运行吗?显然,如果页面未打开,它将无法工作。
getHours
(等)给出用户本地时区的时间。不同时区的用户在不同时间会出现此条件。您使用的条件 --
h == 23 && m == 00 && s == 00
-- 仅当计时器在 23:00 之间触发时才为 true: 00 和 23:00:01。由于您使用的是 1000 毫秒计时器,并且 JS 计时器不能保证在确切的请求时间间隔触发,因此如果计时器在 22:59 触发,某些用户可能最终会“跳过”条件: 59.99 和 23:00:01.00。
但最重要的是:为此使用客户端逻辑是完全不安全的。任何用户都可以随时请求 addCredits.php
任意多次;事实上,它通常是通过这个 Javascript 请求的,但这并不能阻止他们以其他方式运行它。如果您想定期向用户提供积分,请使用服务器端计划任务来执行此操作。
关于javascript - 如何在每天的特定时间自动对 PHP 脚本执行 AJAX 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48597033/