Google Gauge图表未显示

时间:2015-11-10 16:30:55

标签: javascript ajax vbscript google-gauges ewon

我想在网页上创建并显示一个谷歌计量表,用于我正在开发的远程监控程序。我正在使用eWON Flexy 201来做到这一点。我只是在测量仪显示在网页上时遇到了麻烦。

基本上我要做的就是在服务器上使用一种VBScript形式来获取油温并将该值返回到仪表以显示温度。我已经能够以各种方式正确地将该值返回到页面,但是我无法像我想的那样每秒显示和更新仪表。

在当前脚本中,我在控制台中没有收到任何错误,但是没有任何错误呈现。我只得到一个空白区域,仪表应该出现。

<script type='text/javascript'>
  google.load('visualization', '1', {packages:['gauge']});
  google.setOnLoadCallback(drawChart);
function drawChart() {

var x = '<%#TagSSI,Target_Pressure_Setting%>';


var data = new google.visualization.DataTable([
  ['Label', 'Value'],
  ['Oil Temp', x],
]);
var options = {
  width: 450, height: 240,
  greenFrom: 100, greenTo: 150,
  redFrom: 275, redTo: 325,
  yellowFrom:225, yellowTo: 275,
  minorTicks: 5,
  max: 350
};

var chart = new google.visualization.Gauge(document.getElementById('chart_div'));

function refreshData () {
    var json = $.ajax({
        url: 'gauge.shtm', // make this url point to the data file
        dataType: 'number',
        async: true 
    }).responseText;
    //alert(json)

    data = new google.visualization.DataTable(json);

    chart.draw(data, options);
}

refreshData();
setInterval(refreshData, 1000);
}

</script>

这是gauge.shtm文件

<%#TagSSI,Oil_Temp%>

2 个答案:

答案 0 :(得分:0)

在您的场景中,我会建议您进行以下重新排列,看看它是否适合您。 google.setOnLoadCallback()设置了一个回调函数,以便在加载Google Visualization API时执行。但您可以在此处省略此操作,因为您的结果取决于success来电的ajax

<script type='text/javascript'>
    google.load('visualization', '1', {packages:['gauge']});
</script>

<script type='text/javascript'>

    function drawChart(result) {

        var x = '<%#TagSSI,Target_Pressure_Setting%>';

        // this may not required here because it anyway get replaced down the line..
        var data = new google.visualization.DataTable([
          ['Label', 'Value'],
          ['Oil Temp', x],
        ]);

        var options = {
          width: 450, height: 240,
          greenFrom: 100, greenTo: 150,
          redFrom: 275, redTo: 325,
          yellowFrom:225, yellowTo: 275,
          minorTicks: 5,
          max: 350
        };

        var chart = new google.visualization.Gauge(document.getElementById('chart_div'));
        data = new google.visualization.DataTable(result);
        chart.draw(data, options);
    }

    function refreshData(callBack) {
        $.ajax({
            url: 'gauge.shtm',
            dataType: 'number',
            async: true 
        }).done(function(result) {
            callBack(result);           
        });
    }

    refreshData(drawChart);

</script>

如果您注意到一些修改,我正在致电refreshData()drawChart()将作为成功的回调函数执行,例如done(function(result) { })。 ajax成功的结果传递给drawChart()函数,该函数用作回调函数。如果它不起作用,请告诉我。

More to read on callback functions.

答案 1 :(得分:0)

我发现了我的问题。我不是特别确定答案@Rohit416给我的问题是什么,但是在网上搜索时我遇到了一个解决方案并根据我的需要进行了修改。

这是最终为我工作的解决方案

<script type="text/javascript">

      google.setOnLoadCallback(drawChart);

      function drawChart() {

        var data = google.visualization.arrayToDataTable([
          ['Label', 'Value'],
          ['Oil', 80],
        ]);

        var options = {
          width: 400, height: 140,
          redFrom: 275, redTo: 350,
          yellowFrom:200, yellowTo: 275,
          greenFrom: 100, greenTo: 150,
          minorTicks: 5,
          max: 350
        };

        var chart = new google.visualization.Gauge(document.getElementById('chart_div'));
        chart.draw(data, options);

       function getData () {
        $.ajax({
            url: 'oil.shtm',
            success: function (response) {
                data.setValue(0, 1, response);
                chart.draw(data, options);
                setTimeout(getData, 1000);

            }
        });
    }
    getData();
}
google.load('visualization', '1', {packages: ['gauge'], callback: drawChart});

和我的oil.shtm文件如下

这成功地每秒更新我的仪表,我一次用多个仪表测试这个方法,它也可以。