0

私はHighchartsのスピードメーターを使っています。サーバーが稼働しているかどうかを確認するように設定しました。稼働している場合は、速度計に乱数を表示します。サーバーがダウンしている場合は、速度計に 0 を表示します。私はそれを機能させました(ほとんど)。Firebug を実行した状態でロードします。Apache サーバーをシャットダウンすると、ゼロになります。サーバーを再起動すると、乱数の実行に戻ります。問題は、firebug を実行せずに実行した場合です....javascript がゼロのままであるため、起動していないようです。firebug を再び起動するとすぐに...再び乱数が表示され始めます。誰にもアイデアはありますか?

<!DOCTYPE HTML>
<html>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8" >
        <title>Sales Meter</title>

        <script type="text/javascript" src="jquery-1.8.2.min.js"></script>
        <script type="text/javascript">
var flag;
var xmlhttp;
var url="http://192.168.0.5/ajax_info.txt";
//ajax call
function loadXMLDoc(url, cfunc){
   if(window.XMLHttpRequest){
      xmlhttp=new XMLHttpRequest();
   }
   else {
      xmlhttp=new ActiveObject("Microsoft.XMLHTTP");
   }
   xmlhttp.onreadystatechange=cfunc;
   xmlhttp.open("GET",url, true);
   xmlhttp.send();
}

function myFunction(){
   loadXMLDoc(url+'?_dc='+(new Date()).getTime(), function(){
      if(xmlhttp.readyState==4 && xmlhttp.status==200){
         flag = 1;
      }
      else {
         flag = 0;
      }
   });
}

$(function () {

    var chart = new Highcharts.Chart({

        chart: {
            renderTo: 'container',
            type: 'gauge',
            plotBackgroundColor: null,
            plotBackgroundImage: null,
            plotBorderWidth: 0,
            plotShadow: false
        },

        title: {
            text: 'Sales-O-Meter'
        },

        pane: {
            startAngle: -150,
            endAngle: 150,
            background: [{
                backgroundColor: {
                    linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
                    stops: [
                        [0, '#FFF'],
                        [1, '#333']
                    ]
                },
                borderWidth: 0,
                outerRadius: '109%'
            }, {
                backgroundColor: {
                    linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
                    stops: [
                        [0, '#333'],
                        [1, '#FFF']
                    ]
                },
                borderWidth: 1,
                outerRadius: '107%'
            }, {
                // default background
            }, {
                backgroundColor: '#DDD',
                borderWidth: 0,
                outerRadius: '105%',
                innerRadius: '103%'
            }]
        },

        // the value axis
        yAxis: {
            min: 0,
            max: 100,

            minorTickInterval: 'auto',
            minorTickWidth: 1,
            minorTickLength: 2.5,
            minorTickPosition: 'inside',
            minorTickColor: '#666',

            tickPixelInterval: 15,
            tickWidth: 1,
            tickPosition: 'inside',
            tickLength: 5,
            tickColor: '#666',
            labels: {
                step: 5,
                rotation: 'auto'
            },
            title: {
                text: 'sales/min'
            },
            plotBands: [{
                from: 0,
                to: 10,
                color: '#DF5353' // green
            }, {
                from: 10,
                to: 20,
                color: '#DDDF0D' // yellow
            }, {
                from:20,
                to: 100,
                color: '#55BF3B' // red
            }]        
        },

        series: [{
            name: 'Speed',
            data: [80],
            tooltip: {
                valueSuffix: ' sales/sec'
            }
        }]

    }, 
    // Add some life
    function (chart) {
        setInterval(function () {
                   myFunction();
                   if(flag == 1){
               var point = chart.series[0].points[0],
                   newVal,
                   inc = Math.round((Math.random() - .5) * 20);

               newVal = point.y + inc;
               if (newVal < 0 || newVal > 100) {
                   newVal = point.y - inc;
               }
                   point.update(newVal);
                }
                else{

                   var point = chart.series[0].points[0],
                      newVal=0,
                      inc = 0;
                   point.update(0);
                }
        }, 1000);
    });
});

        </script>
    </head>
    <body>
<script src="highcharts.js"></script>
<script src="highcharts-more.js"></script>
<!--<script src="exporting.js"></script>-->

<div id="container" style="width: 500px; height: 400px; margin: 0 auto"></div>

    </body>
</html>

前もって感謝します!

4

1 に答える 1

0

さて、私はそれを理解しました。インスタンス化するときにフラグをゼロに設定する必要がありました (Javascript にインスタンス化された変数はありますか?)。次に、point.update() の後でフラグをゼロにリセットする必要がありました。これで問題は解決しました。誰かが興味を持っている場合は、ここにコードがあります。

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" >
<title>Sales Meter</title>
<script type="text/javascript" src="jquery-1.8.2.min.js"></script>
<script type="text/javascript">
var flag = 0;
var xmlhttp;
var url="http://192.168.0.5/ajax_info.txt";
//ajax call
function loadXMLDoc(url, cfunc){
   if(window.XMLHttpRequest){
      xmlhttp=new XMLHttpRequest();
   }
   else {
      xmlhttp=new ActiveObject("Microsoft.XMLHTTP");
   }
   xmlhttp.onreadystatechange=cfunc;
   xmlhttp.open("GET",url, true);
   xmlhttp.send();
}

function myFunction(){
   loadXMLDoc(url+'?_dc='+(new Date()).getTime(), function(){
      if(xmlhttp.readyState==4 && xmlhttp.status==200){
         flag = 1;
      }
   });
}

$(function () {
    var chart = new Highcharts.Chart({

        chart: {
            renderTo: 'container',
            type: 'gauge',
            plotBackgroundColor: null,
            plotBackgroundImage: null,
            plotBorderWidth: 0,
            plotShadow: false
        },

        title: {
            text: 'Sales-O-Meter'
        },

        pane: {
            startAngle: -150,
            endAngle: 150,
            background: [{
                backgroundColor: {
                    linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
                    stops: [
                        [0, '#FFF'],
                        [1, '#333']
                    ]
                },
                borderWidth: 0,
                outerRadius: '109%'
            }, {
                backgroundColor: {
                    linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
                    stops: [
                        [0, '#333'],
                        [1, '#FFF']
                    ]
                },
                borderWidth: 1,
                outerRadius: '107%'
            }, {
                // default background
            }, {
                backgroundColor: '#DDD',
                borderWidth: 0,
                outerRadius: '105%',
                innerRadius: '103%'
            }]
        },

        // the value axis
        yAxis: {
            min: 0,
            max: 100,

            minorTickInterval: 'auto',
            minorTickWidth: 1,
            minorTickLength: 2.5,
            minorTickPosition: 'inside',
            minorTickColor: '#666',

            tickPixelInterval: 15,
            tickWidth: 1,
            tickPosition: 'inside',
            tickLength: 5,
            tickColor: '#666',
            labels: {
                step: 5,
                rotation: 'auto'
            },
            title: {
                text: 'sales/sec'
            },
            plotBands: [{
                from: 0,
                to: 10,
                color: '#DF5353' // green
            }, {
                from: 10,
                to: 20,
                color: '#DDDF0D' // yellow
            }, {
                from:20,
                to: 100,
                color: '#55BF3B' // red
            }]        
        },

        series: [{
            name: 'Speed',
            data: [80],
            tooltip: {
                valueSuffix: ' sales/sec'
            }
        }]

    }, 
    // Add some life
    function (chart) {
        setInterval(function () {
                   myFunction();
                   if(flag == 1){
               var point = chart.series[0].points[0],
                   newVal,
                   inc = Math.round((Math.random() - .5) * 20);

               newVal = point.y + inc;
               if (newVal < 0 || newVal > 100) {
                   newVal = point.y - inc;
               }
                   point.update(newVal);
                }
                else{

                   var point = chart.series[0].points[0],
                      newVal=0,
                      inc = 0;
                   point.update(0);
                }
            flag = 0;  //reset flag after point update.  
        }, 1000);
    });
});
</script>

</head>
<body>

<div id="container" style="width: 500px; height: 400px; margin: 0 auto"></div>

<script src="highcharts.js"></script>
<script src="highcharts-more.js"></script>
<!--<script src="exporting.js"></script>-->

    </body>
</html>
于 2013-03-17T22:53:19.727 に答える