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

时间:2014-02-14 10:52:53

标签: javascript jquery ajax time

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

我试过setInterval()

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

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

有没有解决方案?

6 个答案:

答案 0 :(得分:4)

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

  • 将AJAX请求放入函数
  • 页面加载后立即调用该函数
  • setTimeout()的成功函数中使用.ajax(),而不是setInterval()围绕整个事件。如果请求出现错误,则setInterval()会继续执行,但setTimeout()不会再次请求,直到请求成功为止。
  • 拆分结果,花费几秒钟,如果结果与.time中的结果不同,请更改它。这假定result11: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();

答案 1 :(得分:3)

试试这段代码:

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();
});

答案 2 :(得分:2)

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);
    }
} 

答案 3 :(得分:2)

如果你想根据用户系统时间准确地运行你的函数,那么你需要实例化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()) );

答案 4 :(得分:1)

user2703250几乎是正确的,请参阅下面的编辑版本:

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);
            }
          });
         }

答案 5 :(得分:0)

如果我理解正确,您可以在第一次运行操作时检查时钟,并在时钟到达下一个seTimeout时使用setInterval准确触发hh:mm:00