1

我建立了一个显示消息的站点,因此 msgloader.js 每 10 秒从管理员那里更新一次消息。客户端不断地在屏幕上显示该站点。

问题是有时互联网连接不太好,显示断开连接,msgloader.js 仍然更新消息,最后屏幕冻结(我知道的原因是网站上也有时钟,时钟从本地机器获取时间,它只是一次冻结,直到我们刷新页面,这是一个问题)。

我怀疑这个冻结问题是因为运行的脚本太多并且机器内存已被占用。

回到问题,有什么办法可以将以下代码设置为在有互联网连接时每 10 秒更新一次消息,否则在没有互联网连接时每隔一小时/两小时更新一次消息。

任何帮助表示赞赏。谢谢。

--------------------------------------------------------------------
Update the data for the static sections
--------------------------------------------------------------------
*/
function updateSection(sect) 
{   
    setTimeout('updateSection(' + sect + ')', 10000);

    //alert('updateSection: ' + sect);
    var ajax = new sack();
    ajax.requestFile = 'ajax/getMessages.php?section='+sect;
    ajax.method = 'post';
    /*ajax.onError = whenError;*/
    ajax.onCompletion = whenComplete;
    ajax.runAJAX();

/*  function whenError() 
    {
        alert('Could not return getMessages values. <br />Please notify the system administrator.');
    }*/

    function whenComplete() 
    {
        var messages = ajax.response;

        var messages1 = messages.split('---');

        var num_messages    = messages1[0];
        //alert('Num Lines: ' + num_messages );
        var messages_list   = messages1[1];
        //alert('MESSAGES: '+messages);
        var msg_data_array  = messages_list.split('::');

        var i=0;            
        switch(sect)
        {
            case 1:

                for(i=0;i<=num_messages;i++)
                {

                    var j = i + 1;
                    icon_to_use = 'icon'+j;

                    // Set icon class
                    var icon = document.getElementById('icon_' + sect + '_' + j);
                    icon_to_use.className = 'icon_pointer';

                    // Set message text
                    // -------------------------------------------                  
                    var msgtext_array = msg_data_array[i].split('##');


                    // Here's the title
                    // -------------------------------------------
                    var msgtext_1a = msgtext_array[1];


                    // Here's the text
                    // -------------------------------------------
                    var msgtext_1 = msgtext_array[2];

                    // Set the title space
                    // -------------------------------------------
                    var msg_1a = document.getElementById('msg_text_' + sect + '_' + j + 'a');

                    // Set the text space
                    // -------------------------------------------
                    var msg_1 = document.getElementById('msg_text_' + sect + '_' + j);

                    // Write in the title
                    // -------------------------------------------                      
                    msg_1a.innerHTML = msgtext_1a;
                     msg_1.innerHTML = "<img src='[url_of_image]' /> " + msgtext_1;
                    // Write in the text
                    // -------------------------------------------                      
                    msg_1.innerHTML = (msgtext_1) ? separator + msgtext_1 : msgtext_1;

                    //msg_1a.style.borderBottom="2px solid white";
                    msg_1a.style.borderBottom="2px solid white";
                    msg_1.style.borderBottom="2px solid white";

                }   break;
            default:
                break;          
        }

        // DEBUG
        if(debug)
        {
            debugReport
            (
                'updateSection():ID: '+msg_id+
                '<br />'+'updateSection():TIMEOUT: '+timeout+
                '<br />'+'ROTATE: '+rotate
            );
        } 
        else 
        {
            debugReset();
        }
    }
}
/*
4

2 回答 2

1

尝试使用这个,

var online = navigator.onLine;

现在你可以这样做,

if(online){
    alert('Connection is good');
}
else{
    alert('There is no internet connection');
}

更新:

试着把警报放在这里,

if(online){
    setTimeout('updateSection(' + sect + ')', 10000);

    //alert('updateSection: ' + sect);
    var ajax = new sack();
    ajax.requestFile = 'ajax/getMessages.php?section=1';
    ajax.method = 'post';
    /*ajax.onError = whenError;*/
    ajax.onCompletion = whenComplete;
    ajax.runAJAX();
}
else{
    alert('There is no internet connection');
}
于 2012-07-10T00:48:41.113 回答
0

如果我对您的理解正确,您可以执行以下操作:

每次在 ajax 请求上发生 onerror 事件时,都会增加一个计数器。在连续失败的设定限制/在一段时间内失败后,您可以更改超时的长度。

var timeoutLength = 10000
setTimeout('updateSection(' + sect + ')', timeoutLength);

ajax 请求失败后更改 timeoutLength,IE 没有互联网连接。

编辑

var errorCount = 0;

ajax.onError = whenError;

function whenError() {
  errorCount++
  if(errorCount < 5) {
    timeoutLength = 3600000
  }
}


function whenComplete() {
   errorCount = 0
   ...
}

这需要连续 5 个错误才能假设 Internet 已关闭。你可能应该玩弄那个。但这应该向您展示总体思路。

于 2012-07-10T00:55:06.883 回答