2012-07-10 3 views
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(); 
     } 
    } 
} 
/* 
+0

Если вы переместите 'setTimeout' в полный обработчик, у вас будет только один выдающийся Ajax-запрос за раз. – nnnnnn

+0

Привет, nnn, я попытался переместить его, но js по-прежнему обновляет сообщения каждые 10 секунд. Есть ли способ установить его каждые 10 секунд, когда есть соединение, и час, когда нет соединения? Благодарю. – grumpypanda

ответ

0

Если я правильно понять вам, что вы могли бы сделать что-то вроде этого:

каждый раз, когда OnError событие происходит на запрос Ajax приращение счетчика. После того, как установленный предел сбоя в строке/завершится с ошибкой в ​​течение некоторого времени, вы измените продолжительность тайм-аута.

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

изменение тайм-аутаLength после сбоя запросов ajax, в IE отсутствует подключение к Интернету.

EDIT

var errorCount = 0; 

ajax.onError = whenError; 

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


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

Это требует 5 ошибок в ряд, чтобы предположить, что интернет вниз. Вы должны, вероятно, поиграть с этим. Но это должно показать вам общую идею.

+0

Привет, Деклан Кук, спасибо за ваш ответ. Я изменил код, как вы сказали выше, я все еще вижу, как js работает в firebugs каждые 10 секунд, даже когда я отключил интернет. Я пытаюсь установить часть обновления каждые 10 секунд, когда есть соединение, это должно быть каждый час, когда нет связи, может ли это быть достигнуто? Благодаря! – grumpypanda

1

Попробуйте использовать это,

var online = navigator.onLine; 

и теперь вы можете сделать так,

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

UPDATE:

Попытка поставить предупреждение здесь,

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'); 
} 
+0

Я был бы осторожен при использовании этого, это не всегда означает, что вы не в Интернете. см. https://developer.mozilla.org/en/DOM/window.navigator.onLine –

+0

Привет, спасибо за ответ.Я сделал, если (онлайн) { \t \t setTimeout ('updateSection (' + sect + ')', 10000); \t} \t \t \t \t еще { \t \t SetTimeout ('UpdateSection (' + раздел + ')', 1000000); \t \t \t \t \t} Однако js по-прежнему обновляет сообщения каждые 10 секунд, даже если я отключу интернет, где я должен применять ваш код? Извините, все еще учась Благодарю. Привет, DECLAN COOK, можете ли вы объяснить немного больше вопросов по использованию этого кода? Благодаря! – grumpypanda

+0

Поместите туда, где вы запросите вызов AJAX, я не вижу в коде точно, где вы запрашиваете вызов, но в коде, который вы отправили, это после функции setTimeout. – itsme

Смежные вопросы