CanvasJS:使用data.php,json编码和ajax(带宽计)使图表动态化 [英] CanvasJS: Making a chart dynamic with data.php, json encode and ajax(bandwidth meters)
问题描述
首先,我试图解析来自data.php文件的数据,该文件使用json编码来回显数据点。每次请求data.php文件时都会更新数据点,但不会在一系列数据点中更新。相反,它只是更改时间值并刷新其y内容。我还没有找到一种方法来实际制作php文件echo系列数据点而不是更新一个。
First things first, I am trying to parse the data from a data.php file that uses json encode to echo a datapoint. The datapoint is updated every time the data.php file is requested, but not in a series of datapoints. Instead it just changes the time value and refreshes its y content. I haven't found a working way to actually make the php file echo series of datapoints and not update a single one.
接下来,图表解析data.php文件,它确实显示数据点。但我想每秒更新一次这个图表,并在每次更新时添加新的数据点,以便我有一个工作带宽图。
Next up, the chart parses the data.php file and it indeed shows the datapoint. BUT I want to make this chart update every second and add new datapoints on every update so that I have a working bandwidth graph.
这是我的代码:
index.php:
<!DOCTYPE HTML>
<html>
<head>
<script type="text/javascript" src="canvasjs.min.js"></script>
<script type="text/javascript" src="js/jquery-2.1.4.min.js"></script>
<script>
$(document).ready(function () {
$.getJSON("data.php", function (data_points) {
var dps = data_points
var chart = new CanvasJS.Chart("chartContainer", {
zoomEnabled: true,
panEnabled: true,
animateEnabled: true,
data: [ {
type: "splineArea",
xValueType: "label",
y: "y",
dataPoints: dps } ]
});
chart.render();
});
});
</script>
</head>
<body>
<div id="chartContainer" style="height: 300px; width: 100%;">
</div>
</body>
</html>
data.php:
<?
session_start();
session_destroy();
session_start();
$rx[] = @file_get_contents("/sys/class/net/wlan0/statistics/rx_bytes");
sleep(1);
$rx[] = @file_get_contents("/sys/class/net/wlan0/statistics/rx_bytes");
$rbps = $rx[1] - $rx[0];
$round_rx=round($rbps/1, 2);
$time=date("Y-m-d H:i:s");
$_SESSION['rx'] = $round_rx;
$data_points['label'] = $time;
$data_points['y'] = $_SESSION['rx'];
echo json_encode([$data_points]);
?>
如果有人知道如何使这张地图动态,那么请给我一些帮助。
data.php文件的示例输出(它回应的内容)如下:
If anyone know on how to make this map dynamic then please provide me some help. An example output of the data.php file (what it echoes) is the following:
[{"label":"2015-09-12 21:34:12","y":1500}]
提前感谢您提供的任何帮助。
Thank you in advance for any help provided.
推荐答案
为了以这种方式更新图表,您只需要创建一次图表(在ajax请求之外)并继续每秒通过ajax请求添加新的dataPoints,如下所示。
In order to update charts that way, you need to create chart only once (outside the ajax request) and keep adding new dataPoints via ajax request each second as shown below.
<!DOCTYPE HTML>
<html>
<head>
<script type="text/javascript" src="canvasjs.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script>
$(document).ready(function () {
var chart = new CanvasJS.Chart("chartContainer", {
zoomEnabled: true,
panEnabled: true,
animateEnabled: true,
data: [ {
type: "splineArea",
xValueType: "label",
y: "y",
dataPoints: []
} ]
});
function updateChart(){
$.getJSON("data.php", function (data_points) {
for(var i = 0; i < data_points.length; i++){
chart.options.data[0].dataPoints.push(data_points[i]);
}
chart.render();
});
}
var updateInterval = 1000;
setInterval(function(){
updateChart()
}, updateInterval);
});
</script>
</head>
<body>
<div id="chartContainer" style="height: 300px; width: 500px;"></div>
</body>
</html>
这篇关于CanvasJS:使用data.php,json编码和ajax(带宽计)使图表动态化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!