Pas*_*ein 5 comet google-visualization
我想使用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>
Run Code Online (Sandbox Code Playgroud)
我想我可以使用Ajax-Request每隔几秒钟拉一次数据并重绘图表.但也许在Google Charts中有一些我错过的inbuild-Method.我也读了很多关于Comet的内容,但我从未实现过这个概念.
还有其他人遇到过这个问题吗?
在计时器上实现 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();
}
Run Code Online (Sandbox Code Playgroud)
使用 Comet 服务的实现要复杂一些,因为它需要在 javascript 中和服务器上设置类似Socket.Io的内容。
使用 Comet 服务将保证图表中的数据始终是最新的,而 AJAX 更易于实现。Comet 需要维持与服务器的活动连接,而 AJAX 会发出多个独立请求。
| 归档时间: |
|
| 查看次数: |
3873 次 |
| 最近记录: |