我构建了一个站点显示消息,因此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();
}
}
}
/*
答案 0 :(得分: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');
}
答案 1 :(得分: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个错误来假设互联网已关闭。你可能应该玩那个。但这应该向你展示一般的想法。