Javascript HighCharts未添加系列数据点
我在尝试根据highcharts的日期动态更改数据时遇到了一些大问题。为了更好地理解我的程序,它使用时间戳记录系统数据。我有一个日期和时间选择器来指定获取新数据的开始和结束日期/时间。这将通过JS和Ajax传递给PHP,并返回XML。Javascript然后将XML解析为图表的新数据 值得注意的是,我尝试过删除所有系列,甚至尝试过完全销毁图表,但由于某些原因,我无法让它将系列点添加回图表中。另一个注意事项是,我使用JS函数生成图表 以下是使用Ajax的JS:Javascript HighCharts未添加系列数据点,javascript,php,jquery,ajax,highcharts,Javascript,Php,Jquery,Ajax,Highcharts,我在尝试根据highcharts的日期动态更改数据时遇到了一些大问题。为了更好地理解我的程序,它使用时间戳记录系统数据。我有一个日期和时间选择器来指定获取新数据的开始和结束日期/时间。这将通过JS和Ajax传递给PHP,并返回XML。Javascript然后将XML解析为图表的新数据 值得注意的是,我尝试过删除所有系列,甚至尝试过完全销毁图表,但由于某些原因,我无法让它将系列点添加回图表中。另一个注意事项是,我使用JS函数生成图表 以下是使用Ajax的JS: function LoadNewCP
function LoadNewCPUData(fromdate, todate, serverid) {
var chart = $('#cpuContainer').highcharts().series[0].remove();
$.ajax({
type : "GET",
url : "js/ajax.php?page=cpudata&fromdate=" + encodeURIComponent(fromdate) + "&todate=" + encodeURIComponent(todate) + "&serverid=" + serverid,
dataType : "xml",
success : function(xml) {
var cpudata = [];
var timestamps = [];
$(xml).find('cpudata').each(function() {
cpudata.push($(this).attr('cpu'));
var t = $(this).attr('timestamp').split(/[- :]/);
var d = new Date(t[0], t[1]-1, t[2], t[3], t[4], t[5]);
timestamps.push(formatDate(d));
});
GenerateCPU(timestamps, cpudata);
}
});
}
如您所见,该函数将xml数据解析为两个数组(timestamp和cpudata),然后将其发送给GenerateCPU。formatDate在另一个函数中定义。如果需要,我可以展示它,但我不认为它是相关的(更多信息见下文)。以下是GenerateCPU:
function GenerateCPU(times, cpuInfo) {
$('#cpuContainer').highcharts({
chart : {
type : 'line'
},
credits : {
enabled : false
},
title : {
text : 'CPU Usage'
},
tooltip : {
valueSuffix : '%'
},
xAxis : {
categories : times
},
yAxis : {
title : {
text : 'CPU Usage',
},
tickInterval : 1,
min : 0,
max : 100
},
series : [{
name : 'CPU Usage',
data : cpuInfo
}]
});
}
整件事的奇怪之处在于图表显示了xAxis的正确数据(在GenerateCPU的参数中定义)。然而,无论我做什么,我都无法让它显示系列数据。我也尝试过chart.addSeries,但那也不起作用。cpudata阵列在发送到GenerateCPU之前和在GenerateCPU中都有数据。下面是XML的一个示例:
<cpuinfo>
<cpudata timestamp="2015-08-06 20:20:31" cpu="15"/>
</cpuinfo>
我希望这篇文章不要太长,有人能读一读。有人知道我做错了什么吗
谢谢大家! 如果在尝试更新数据之前第一张图表显示正确,则问题可能来自重新定义图表。我建议您使用Highcharts的
update()
功能动态更新系列和xAxis
编辑
那么您的代码将变成什么:
function LoadNewCPUData(fromdate, todate, serverid) {
$.ajax({
type : "GET",
url : "js/ajax.php?page=cpudata&fromdate=" + encodeURIComponent(fromdate) + "&todate=" + encodeURIComponent(todate) + "&serverid=" + serverid,
dataType : "xml",
success : function(xml) {
var cpudata = [];
$(xml).find('cpudata').each(function() {
var t = $(this).attr('timestamp').split(/[- :]/);
var d = new Date(t[0], t[1]-1, t[2], t[3], t[4], t[5]);
cpudata.push({name: formatDate(d), y: parseInt($(this).attr('cpu'))});
});
GenerateCPU(cpudata);
}
});
}
生成的CPU函数变成:
function GenerateCPU(cpuInfo) {
$('#cpuContainer').highcharts({
chart : {
type : 'line'
},
credits : {
enabled : false
},
title : {
text : 'CPU Usage'
},
tooltip : {
valueSuffix : '%'
},
xAxis : {
type: 'category'
},
yAxis : {
title : {
text : 'CPU Usage',
},
tickInterval : 1,
min : 0,
max : 100
},
series : [{
name : 'CPU Usage',
data : cpuInfo
}]
});
}
这会给你一个不同的结果吗
重新编辑
您的错误14被抛出,因为您传递的是字符串而不是数字。使用上面类似的函数parseInt()
来避免它。(如果您有小数,请使用parseFloat()
)虽然我很感激您的努力,但不幸的是,无论我使用.update()还是重新生成图表,它都会产生完全相同的效果。@user2416047这样您就看不到图表上的任何点了吗?这就是你想要更新它的时候吗?甚至在第一次生成时?@user2416047查看我的编辑。我将数据格式更改为[{name:name,y:value},…]。再次感谢您的帮助。不幸的是,这次我从Highcharts中抛出了一个错误14。我无法理解为什么,因为上面代码中的一切似乎都正常。回到您的原始代码(使用.update()方法),我拍摄了一个小视频来精确显示我遇到的问题。最奇怪的是,它会改变日期范围,只是没有绘制数据。数据的格式与从页面加载和单击“加载数据”按钮时的格式完全相同。@user2416047我想我理解了这个问题。错误14是当您给出的是字符串而不是数字时。请参阅我的重新编辑;)(添加了parseInt()
函数来解析'cpu'
属性)尝试使用Date.UTC()并让我知道您的时间、cpuInfo变量的样子。感谢您的回复。我不认为是日期,因为当我修改数据时,日期会正确显示。请看视频。按下按钮时,日期将更新。至于变量,因为它们在一个数组中,所以我将把数组放在一个粘贴箱中。时间戳:-cpudata:。页面加载时的数据与我单击“加载数据”按钮时的数据没有区别。在您的数据中,时间是不正确的,因为应该是时间戳(时间单位为毫秒)。