如何在特定时间每天自动执行PHP脚本的AJAX请求?

时间:2018-02-03 11:50:18

标签: javascript php ajax date

我尝试编写一个代码,该代码每天会在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>

1 个答案:

答案 0 :(得分:2)

我在这里看到了几个问题。

  1. 您确定您的用户实际拥有此页面并且在23:00:00运行吗?如果页面显然没有打开,它将无法工作。

  2. getHours(等)在用户的本地时区给出时间。不同时区的用户在不同时间都会有这种情况。

  3. 您使用的条件 - h == 23 && m == 00 && s == 00 - 仅在定时器在23:00:00和23:00:01之间触发时才会生效。由于您使用的是1000毫秒计时器,并且JS计时器无法在确切的请求时间间隔内启动,因此某些用户最终可能会跳过&#34;跳过&#34;如果计时器在比例为22:59:59.99和23:00:01.00时触发的条件。

  4. 最重要的是,但是:使用客户端逻辑是完全不安全的。任何用户都可以随时多次请求addCredits.php;它通常通过此Javascript请求的事实不会阻止它们以其他方式运行它。如果您想定期为用户提供信用,请使用服务器端计划任务来执行此操作。