2017-11-18 120 views
1

我有一个jQuery自动刷新我的数据。我每60秒/ 1分钟运行一次。jQuery根据当前休息时间每分钟刷新一次

setInterval(function() 
{ 
    //if every 60 seconds based on current time (count the rest of second from current time) then run the AJAX. 
    $.ajax(
    { 
     url: "chkProfile.php", 
     type: "POST", 
     data: 
     { 
     }, 
     dataType: "JSON", 
     success: function (jsonStr) 
     { 
     } 
    }) 
},60000); 

,现在我想,当我随时手动刷新我的网页,例子中,我在十二时20分40秒和我们知道的秒其余20然后运行AJAX。

目前如果我在12点20分四十秒,然后它会运行在十二时21分40秒

阿贾克斯我要的是,如果我在12点20分四十秒,那么它应该在12时21分00秒

+0

岂不是服务器负载更好,如果每个人都赚不到,在同一时间要求吗? – charlietfl

+0

有时,我需要刷新它,由于一些修补代码/任何技术问题。因此,当我再次打开页面时,它将根据第二个当前时间的其余时间每分钟刷新一次。 –

+0

应该很简单,可以使用日期获取当前时间,并使用setTimeout在下一个整分钟处开始setInterval – charlietfl

回答

1

简单的解决方案运行AJAX:

你可以检查它,如果每一秒第二个是0 AJAX必须运行。 尝试此:

setInterval(function() 
{ 
    var second = parseInt((new Date().getTime()/1000) % 60); 
    if(second === 0) { 
     $.ajax({ 
       url: "chkProfile.php", 
       type: "POST", 
       data:{}, 
       dataType: "JSON", 
       success: function (jsonStr){} 
      }); 
     } 
},1000); // or less than 1 sec 

优化的解决方案:

第一计算秒是如何保持到下一分钟,并设置间隔每60分钟。

// define fetch data function 
    var fetchData = function(){ 
     $.ajax({ 
      url: "chkProfile.php", 
      type: "POST", 
      data:{}, 
      dataType: "JSON", 
      success: function (jsonStr){} 
     }); 
    } 

    // begin when dom is ready 
    $(document).ready(function(){ 
     fetchData(); // run fetchData(); here if you want to ajax at first load time 
     // get remain time to next minute 
     var remainTime = 60 - parseInt((new Date().getTime()/1000) % 60); 
     setTimeout(function(){ 
     fetchData(); 
     // redo every minute 
     setInterval(fetchData, 60000); 
     }, remainTime*1000) 
    }) 

片段为没有AJAX例如:

// define fetch data function 
 
var fetchData = function() { 
 
    document.write(new Date()) 
 
} 
 

 
// begin when dom is ready 
 
$(document).ready(function() { 
 
    fetchData(); // run fetchData(); here if you want to ajax at first load time 
 
    // get remain time to next minute 
 
    var remainTime = 60 - parseInt((new Date().getTime()/1000) % 60); 
 
    setTimeout(function() { 
 
    fetchData(); 
 
    // redo every minute 
 
    setInterval(fetchData, 60000); 
 
    }, remainTime * 1000) 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

真棒,问题如何保持页面加载时第一次加载ajax函数? –

+0

我仍然使用代码中的简单解决方案,可以吗? –

+0

@HiDayurieDave因为这些优化的解决方案是'优化解决方案'。你必须阻止你的ajax代码到像第二个解决方案那样的功能,然后在第一次加载时运行它。 –

相关问题