实时使用彗星更新谷歌图表

5
我想使用Google Chart创建一个实时更新的柱状图。当用户加载页面时,我想显示当前结果。但是,一旦我的数据库中的数据发生更改,我希望将这些更改推送到客户端并更新图表。
以下是来自Google Charts页面的柱状图示例:
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
  google.load("visualization", "1", {packages:["corechart"]});
  google.setOnLoadCallback(drawChart);
  function drawChart() {
    var data = new google.visualization.DataTable();
    data.addColumn('string', 'Year');
    data.addColumn('number', 'Sales');
    data.addColumn('number', 'Expenses');
    data.addRows([
      ['2004', 1000, 400],
      ['2005', 1170, 460],
      ['2006', 660, 1120],
      ['2007', 1030, 540]
    ]);

    var options = {
      title: 'Company Performance',
      vAxis: {title: 'Year',  titleTextStyle: {color: 'red'}}
    };

    var chart = new google.visualization.BarChart(document.getElementById('chart_div'));
    chart.draw(data, options);
  }
</script>

我想我可以使用Ajax请求每隔一些秒来拉取数据并重新绘制图表。但也许Google Charts中有一些内置的方法我没有注意到。我还阅读了很多关于 Comet的内容,但从未实现过这个概念。
还有其他人遇到这个问题吗?
1个回答

2
在定时器上实现AJAX是最简单的解决方案:
// using jQuery for simplicity, but you can implement in other libraries or vanilla javascript if you want
function drawChart() {
    var options = {
        title: 'Company Performance',
        vAxis: {title: 'Year',  titleTextStyle: {color: 'red'}}
    };

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

    function updateChart () {
        $.ajax({
            url: 'path/to/data/source/',
            data: {/* any parameters you need to pass to the server to get your data back */},
            dataType: /* text, json, XML, whatever your server returns */,
            success: function (response) {
                // use response to create/update DataTable
                chart.draw(data, options);
                // update the chart again in 2 seconds
                setTimeout(updateChart, 2000);
            },
            error: function (response) {
                // handle errors
            }
        });
    }
    updateChart();
}

使用Comet服务的实现稍微复杂一些,因为它需要在javascript和您的服务器上设置类似Socket.Io的东西。
使用Comet服务将始终保证图表中的最新数据,而AJAX更简单易用。Comet需要维持与服务器的活动连接,而AJAX则会发出多个独立的请求。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接