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

标签 javascript php ajax date

我尝试编写一段代码,每天 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>

最佳答案

我在这里发现了一些问题。

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

  2. getHours(等)给出用户本地时区的时间。不同时区的用户在不同时间会出现此条件。

  3. 您使用的条件 -- 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/

相关文章:

javascript - 如何访问 Backbone Fetch 数据服务器端

php - 如何允许正则表达式匹配一个字符错误

javascript - 如果服务器端代码托管在不同的域上,ajax 会运行吗?

ajax - 为什么跨域Ajax是一个安全问题?

PHP/mysql 我的代码有什么问题,它插入到了错误的列

javascript - 为什么在点击链接时进行 jquery/ajax 调用时无法获取值?

javascript - Chart.js - 鼠标悬停导致图形闪烁和调整大小

javascript - 如何为 html 创建 iPhone 联系人标题滚动效果?

javascript - 如何使用 XPath 表达式检索 CasperJS 中元素的属性

PHP MySQL 更新数据库中的日期时间