1

サイト表示メッセージを作成したので、msgloader.jsは管理者から10秒ごとにメッセージを更新します。クライアントはこのサイトを常に画面に表示します。

問題は、インターネット接続があまり良くなく、ディスプレイが切断され、msgloader.jsがメッセージを更新し、最終的に画面がフリーズすることです(私が知っている理由は、サイトにも時計があるからです。時計はローカルマシンから時間を取得します。問題となるページを更新するまで、一度にフリーズします)。

このフリーズの問題は、実行中のスクリプトが多すぎて、マシンのRAMが使用されていることが原因であると思われます。

質問に戻る、インターネット接続がある場合は10秒ごとに更新メッセージに以下のコードを設定する方法はありますか?それ以外の場合はインターネット接続がない場合は1時間または2時間ごとにメッセージを更新します。

どんな助けでも大歓迎です。ありがとう。

--------------------------------------------------------------------
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つのエラーが必要です。あなたはおそらくそれで遊んでみるべきです。しかし、これはあなたに一般的な考えを示すはずです。

于 2012-07-10T00:55:06.883 に答える