【问题标题】:Making an ajax request at every 30 minute mark with Javascript使用 Javascript 每 30 分钟发出一次 ajax 请求
【发布时间】:2016-12-22 14:21:52
【问题描述】:

我需要使用 Javascript 每 30 分钟发出一次 ajax 请求。

对于当前登录的用户,我需要检索开始日期等于当前时间的所有通知。当用户创建这些通知时,他们只能保存 30 分钟的间隔。因此,在数据库中,您将看到 StartDates 像 12/22/2016 08:00:00、12/22/2016 08:30:00、12/25/2016 09:00:00、12/28/2016 09:30 :00 等...

如果有帮助,我有 moment.js

【问题讨论】:

  • 抱歉,无法进行如此精确的 ajax 调用。您将不得不在服务器端处理此逻辑。您可以创建一个每 30 分钟运行一次的循环,看看这个答案:stackoverflow.com/questions/3583724/…
  • @Xavjer 所以我需要使用 Hangfire 之类的东西设置一个重复性工作并使用 SignalR 将通知输出到客户端?
  • 我不知道,您到底想做什么,但这将是一个可能的解决方案。为什么不将它们与确切的日期一起存储在数据库中,然后以 30 分钟为一组进行检索(选择所有 08:00:01-08:30:00 等)
  • @Xavjer 我只想实时向他们显示用户通知。通知与 StartDate 一起存储在数据库中。 StartDate 上的时间始终为 30 分钟。在用户浏览网站的任何时候,我想在通知到达其 StartDate 时通知他们。

标签: javascript jquery ajax asp.net-mvc momentjs


【解决方案1】:

您可以使用setIntervalsetTimeout 的组合。如果用户刷新页面,它将重新计算下一个半小时并从那里开始。您可以使用日期对象getSecondsgetMilliseconds 和类似的算法来获得更高的精度。

var minutes = new Date().getMinutes();
var numberOfMinutesTillNextHalfHour = (minutes <= 30)? 30 - minutes : 60 - minutes;
var minutesToSeconds = 60;
var secondsToMiliseconds = 1000;
setTimeout(function(){
    /* this will execute on the next half hour */
    setInterval(function(){
        /* this will execute ever half hour after that */
    }, 30 * minutesToSeconds * secondsToMiliseconds);
},numberOfMinutesTillNextHalfHour * minutesToSeconds * secondsToMiliseconds);

【讨论】:

  • 这个答案非常好。如果我想每 15 分钟将其切换为间隔,我应该可以毫无问题地进行,对吗?另外,我想我不明白你在说什么来获得更高的精度。你只是说更新 numberOfMinutesTillNextHalfHour 变量来检查秒和毫秒吗?我可以轻松地做 moment().get('minute'); moment().get('second'); moment().get('毫秒');
【解决方案2】:

你可以试试这个

var response = true;
function request(){
    if(response == true){
       response = false;
       var req = $.ajax({
           type:"post",
           url:"URL_CALL",
           data:{data:"Hello World"}
       });
       req.done(function(){
          console.log("Success");
          response = true;
      });
   }
   setTimeout(request(),1000);
}
request();

【讨论】:

  • 无论用户如何更改网站上的页面,这是否会持续工作?我想知道是否可以设置一个循环来不断检查当前时间,如果分钟为 30 或 00,则始终执行 ajax 请求。这行得通吗?
  • window.globalVar = request() 将使函数() 全球化。应该工作。
  • 好吧,有没有你可以帮我定制这个功能,这样它就可以减少调用次数。如果当前时间的分钟数为 15 分,我只需要拨打电话。所以我不能这样做: if (makeRequest && minute / 15 === 1 || minute / 15 === 2 || minute / 15 === 3 || minute / 15 === 4) 也在你的回答说没有定义响应。我应该在哪里定义它?
  • 对不起,我没有时间帮你写完整的东西。但我会尽力为您指明正确的方向。第一的。获取当前时间。 var currentTime = new Date(); var 分钟 = currentTime.getMinutes()。从几分钟你需要得到最近的 15,所以我会使用 if else 来得到这个。然后我会在请求中将其作为 arg 传递(minsto15);成功后,我会将时间重置为正常的 15 分钟。这永远不会是准确的,并且会在服务器等上浪费时间。
  • 我过去曾用它来安排工作quartz-scheduler.net,它非常有效。剩下的就是通知客户的问题,但这会为您每 x 分钟运行一次作业
猜你喜欢
  • 1970-01-01
  • 2011-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-29
  • 1970-01-01
相关资源
最近更新 更多