【发布时间】:2019-11-07 06:41:48
【问题描述】:
我正在尝试从服务器端加载数据并在 Highcharts 中一一显示。
但在将它们显示在 Highchart 上之前,我正在对数据进行一些处理,然后将其渲染到 Highchart 中。
我正在使用 AJAX,这样我每次都可以获取数据,而无需刷新页面并重新加载图表。
图表对第一组数据运行良好,然后显示未定义,图表未显示任何下一组数据。
这里有我用来获取数据的 random.php 文件:
header("Content-type: text/json");
$data = [];
for($i=0; $i<500; $i++)
{
$data[] = rand(0,10);
}
$into_mysql = json_encode($data);
echo $into_mysql;
现在我正在其他页面的图表中获取数据:
var chart;
// Prototype to Request Data using `AJAX`
function requestData() {
$.ajax({
url: 'random.php',
async: false,
success: function (data) {
y = data;
console.log(y);
return (y);
}
});
}
// Fetch the data from the `requestData` and process it.
function fetch() {
requestData();
var divisor = 2;
var count = 0;
for (var i = 0, length = y.length; i < length; i++) {
y[i] /= divisor;
}
console.log(y);
return (y);
setInterval(function () { requestData }, 1000);
}
var json_array = fetch();
var i = 0;
function next() {
return json_array[i++];
// i++;
}
Highcharts.chart('container', {
chart: {
type: 'line',
animation: Highcharts.svg, // don't animate in old IE
marginRight: 10,
events: {
load: function () {
// set up the updating of the chart each second
var series = this.series[0],
chart = this;
var count = 0;
setInterval(function () {
var x = (new Date()).getTime(), // current time
y = next();
console.log(y);
series.addPoint([x, y], false, true);
chart.redraw(false);
}, 1000 / 130);
}
}
},
time: {
useUTC: false
},
title: {
text: 'ECG Graph Plot From MySQl Data'
},
xAxis: {
type: 'datetime',
labels: {
enabled: false
},
tickPixelInterval: 150
},
yAxis: {
//max: 1.5,
//min: -1.5,
title: {
text: 'Value'
},
plotLines: [{
value: 0,
width: 1,
color: '#808080'
}]
},
tooltip: {
headerFormat: '<b>{series.name}</b><br/>',
pointFormat: '{point.x:%Y-%m-%d %H:%M:%S}<br/>{point.y:.2f}'
},
legend: {
enabled: false
},
exporting: {
enabled: false
},
series: [{
animation: false,
name: 'ECG Graph Plot From MySQl Data',
dataGrouping: {
enabled: false
},
data: (function () {
// generate an array of random data
var data = [],
time = (new Date()).getTime(),
i;
for (i = -1000; i <= 0; i += 1) {
data.push([
time + i * 10,
null
]);
}
return data;
}())
}]
});
所以我需要的是一个一个地渲染数据而不破坏它。当来自 random.php 的 One 数据集结束时。下一个数据应该继续那个开始。
更新:
假设每隔几秒就会生成一个包含 500 个数据的数组。我想要的是在一张高图中一一显示数组点。但只显示第一组数组数据,其余数组数据不显示。
【问题讨论】:
-
你能在像 jsfiddle 这样的在线代码编辑器中重现你的问题吗?使用具有相同结构的假静态数据代替真实数据。请尽量准确地说明您将要实现的目标。
-
我无法在在线代码编辑器中生成相同的内容。因为我每次都需要来自 AJAX 调用的数据。 @WojciechChmiel。
-
我试图让问题更清楚。请参阅问题底部的更新部分
-
这是您的代码的复制品:jsfiddle.net/BlackLabel/defm0qLc/1。您不需要 AJAX 使用静态数据和 setTimeout 来重现它。
-
你这样做真是太好了 :) .. 现在根据你的小提琴,数组数据只在 Highcharts 上产生一次。现在我需要的是下一个数组数据应该在前一个数据的延续中打印。它只显示一个数组数据。我尝试了很多东西。但无法做到这一点。 @WojciechChmiel
标签: javascript php ajax highcharts