如何在后台进行自动更新

时间:2013-01-18 23:22:27

标签: php javascript mysql ajax

我有

  1. 数据库中的1个单位
  2. 每个单位都有自己的更新时间,以秒为单位
  3. 具有动态内容的网页
  4. 目前有嵌入式自动刷新(2分钟),每次被称为
  5. function refreshPage(){

    minutes = 2;
    seconds = 0;  
    interval=120000;
    getCheckedUnits(); //call to function that checks and updates stuff
    

    }

    function timedRefresh(timeoutPeriod) {
        //refreshPage();
        setInterval(refreshPage, timeoutPeriod);
        countdown('countdown');
    }
    
    var interval;
    var minutes = 2;
    var seconds = 0;
    
    function countdown(element) {
        interval = setInterval(function() {
            var el = document.getElementById(element);
            if(seconds == 0) {
                if(minutes == 0) {
                    el.innerHTML = "Waiting for refresh";
                    clearInterval(interval);
                    return;
                } else {
                    minutes--;
                    seconds = 60;
                }
            }
            if(minutes > 0) {
                var minute_text = minutes + (minutes > 1 ? ' minutes' : ' minute');
            } else {
                var minute_text = '';
            }
            var second_text = seconds > 1 ? 'seconds' : 'second';
            el.innerHTML = 'Page will auto-refresh in: ' + minute_text + ' ' + seconds + ' ' + second_text + ' remaining';
            seconds--;
        }, 1000);
    }
    

    我需要做什么,让它对用户透明,并根据需要调用更新(我有在数据库中设置的值)。

    作为一个解决方案(在JS-Ajax中),我可以使用与上面相同的计时器(将其设置为5秒)并创建一个包含存储id,上次更新时间和下次更新时间的对象的数组。然后我只能在当前时间超过下一个更新时间时更新每个对象。 或者我可以通过cron-job接近这个方法。

    我以前从未这样做过,我想听听基于经验的意见。什么是最好的选择?

1 个答案:

答案 0 :(得分:0)

您获取上次更新时间并在获取更大数据之前比较它们的方案是解决此问题的完美有效方法,但您可以考虑其他方法。特别是,您尝试实现的目标是server push。使用最后更新时间戳可以近似于此,但是长轮询和(在将来/某些浏览器中)WebSockest等替代技术是一些替代方案。

Here is a better writeup to a similar question