AJAX jQuery – 每分钟更新一次内容

如果用户计算机上的系统时钟看起来像这样,我正在考虑一个每分钟刷新一次的时钟。 11:08:00,它会刷新和11:09:00等

我试过setInterval()

 setInterval(function(){ $.ajax({ url: "../time.php", context: document.body, success: function(result){ $('.time').html(result); } }) }, 60000); 

但它在页面加载后每分钟重新加载。

有什么解决方案吗?

试试这段代码:

 var interval = 0; function start(){ setTimeout( function(){ ajax_function(); interval = 60; setInterval( function(){ ajax_function(); }, interval * 1000); }, interval * 1000); } function ajax_function(){ $.ajax({ url: "../time.php", context: document.body, success: function(result){ $('.time').html(result); } }); } $( window ).load(function(){ var time = new Date(); interval = 60 - time.getSeconds(); if(interval==60) interval = 0; start(); }); 

setInterval()不会立即调用它的函数,在这种情况下第一次运行函数将在页面加载后60秒。 您可以进行以下更改以获得您正在寻找的结果:

  • 将AJAX请求放在一个函数中
  • 页面加载后立即调用该函数
  • .ajax()的成功函数中使用setTimeout() ,而不是围绕整个事物使用setInterval() 。 如果请求出错, setInterval()将继续执行,但setTimeout()将不会再次发送,直到请求成功。
  • 拆分结果,花费几秒钟,如果结果与.time已有的结果不同,请更改它。 这假设result是一个像11:08:00的字符串
  • 如果要确认服务器何时返回分钟更改的时间,则需要每秒检查一次
 function update(){ $.ajax({ url: "../time.php", context: document.body, success: function(result){ var secondless = result.split(':'), $time = $('.time'); secondless = secondless [0]+':'+secondless [1]; $time.html(function(_,v){ return secondless != v ? secondless : v } setTimeout(update, 1000); } }) } update(); 
 var d = new Date(); var n = d.getSeconds(); while(n != 0){ d = new Date(); n = d.getSeconds(); if(n == 0){ setInterval(function(){ $.ajax({ url: "../time.php", context: document.body, success: function(result){ $('.time').html(result); } }) }, 60000); } } 

如果你想根据用户系统时间准确地运行你的函数,那么你需要实例化Date time对象并检查getSeconds()的当前状态,如果它等于0,那么你就是在那一刻,如果没有,你需要从60减去它的结果,然后将它传递给setTimeout,它将在分钟上完全调用setInterval函数。

原油的例子;

 var time = new Date(); var timeout = 0; if ( time.getSeconds() != 0 ) { timeout = (60 - time.getSeconds()); } setTimeout(function(){ setInterval( function(){ $.ajax({ url: "../time.php", context: document.body, success: function(result){ $('.time').html(result); } })}, 60000); }, timeout); 

代码高尔夫球手的替代例子;

 setTimeout(function(){ setInterval( function(){ $.ajax({ url: "../time.php", context: document.body, success: function(result){ $('.time').html(result); } })}, 60000); }, (60 - new Date().getSeconds()) ); 

user2703250几乎是正确的,请看下面编辑过的verison:

 var d = new Date(); var n = d.getSeconds(); while(n !== 0){ d = new Date(); n = d.getSeconds(); if(n === 0){ dopage_update();} } function dopage_update(){ $.ajax({ url: "../time.php", context: document.body, success: function(result){ $('.time').html(result); setTimeout(function(){dopage_update();}, 60000); } }); } 

如果我没有正确地检查你,你可以在第一次运行动作时检查时钟,并在时钟到达下一个hh:mm:00时使用seTimeout准确触发setInterval