gpt4 book ai didi

javascript - Dynamic Highcharts 未更新

转载 作者:行者123 更新时间:2023-11-30 00:29:13 26 4
gpt4 key购买 nike

这是我的用例。我正在使用 Flume 和 Spark Streaming 来计算从服务器生成的事件数。所以在 Spark 的输出中我得到时间戳和事件数。每 10 秒后,旧值将被删除,新值将写入 HDFS 中的文件。

我已经创建了 Spring 框架,它将从 HDFS 中提取数据并将其转换为 json 并将其推送到 Highcharts。所以我试图生成一个实时样条图,它将在 x 轴上显示时间戳,在 y 轴上显示计数,并在每 10 秒后从 spark 输出中获取新数据时更新它。但是 x 轴没有移动,我可以在 y 轴上看到 10 个零值。所以我无法获得更新的 y 值。我确定我在 java 脚本中遗漏了一些东西。因为从 spring 的控制台我可以看到事件每 10 秒更新一次。但它没有反射(reflect)在图表中。

过去两周我被困在这里,迫切需要帮助。任何帮助都感激不尽。谢谢。

 <!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">

<title>Insert title here</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript" src="http://code.highcharts.com/highcharts.js" ></script>
<script type="text/javascript" src="http://code.highcharts.com/maps/modules/exporting.js" ></script>
<script type="text/javascript" src="http://code.highcharts.com/modules/drilldown.js"></script>
<script src="http://code.highcharts.com/modules/exporting.js"></script>
<script type="text/javascript" src="js/app/appStart.js" ></script>
<link type="text/css" href="css/app.css" rel="stylesheet">
<script src="http://code.highcharts.com/stock/modules/exporting.js"></script>
</head>
<body>
<div class="chart" id="statusChart" >
</div>
</body>

$(function() {

var url = 'statistics';

$.ajax(url).done(function(data) {
loadStatusChart(data);
});

});

function updateStatusSeries(series){
var url = 'statistics';

$.ajax(url).done(function(data) {
var statusCode = data.statusCode[0];
series.addPoint([statusCode.label, statusCode.value], true, true);
});
}

function loadStatusChart(statistics) {
var StatusCode = statistics.statusCode;

var StatusSeries = [];
$.each(StatusCode, function(index, item) {

var timeInSeconds = item.label/1000;
for(var i = 10; i >= 1; i--){
StatusSeries.push({
x : (timeInSeconds - (i*10))*1000,
y : 0
});
}
StatusSeries.push({
x : item.label,
y : item.value
});
})
var x = StatusCode.length;

$("#statusChart").highcharts({
chart : {
type : 'spline',
//animation : Highcharts.svg,
marginRight : 10,
events : {
load : function(){
//set up updating of the chart each second
var series = this.series[0];
setInterval(function (){
updateStatusSeries(series);
}, 10000);
}
}
},
title: {
text: 'Live Data'
},
xAxis: {
type: 'datetime'
},
yAxis: {
title: {
text: 'Number of Counts'
},
plotLines: [{
value: 0,
width: 1,
color: '#808080'
}]
},
tooltip: {
formatter: function () {
return '<b>' + this.series.name + '</b><br/>' +
Highcharts.dateFormat('yyyy/mm/dd hh:mm:ss', this.x) + '<br/>' +
Highcharts.numberFormat(this.y, 2);
}
},
legend: {
enabled: false
},
exporting: {
enabled: false
},
series: [{ data: StatusSeries }]
});
};

最佳答案

首先,由于这段代码,您在图表中得到了前导零:

for(var i = 10; i >= 1; i--){  // <----- 10
StatusSeries.push({
x : (timeInSeconds - (i*10))*1000,
y : 0 // <----- zero values
});
}

其次,您的图表没有前进,因为在这部分

events : {
load : function(){
//set up updating of the chart each second
var series = this.series[0];
setInterval(function (){
updateStatusSeries(series); // <----- Not updating series
}, 10000);
}
}

updateStatusSeries(series) 实际上不会更新 series,因此图表不会获取新数据,只是停留在同一位置。

要解决这个问题,您可以选择

此外,日期格式(在 tooltip.formatter 中)应该像这样完成:

Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', this.x)

关于javascript - Dynamic Highcharts 未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30243691/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com