Javascript 动态更新pointStart和pointInterval
我使用highcharts显示每日统计数据,我希望用户能够选择日期范围Javascript 动态更新pointStart和pointInterval,javascript,highcharts,Javascript,Highcharts,我使用highcharts显示每日统计数据,我希望用户能够选择日期范围 function requestData(chart, from, to, group) { $.ajax({ url: '/stats/chart?from='+from+'&to='+to+'&group='+group, success: function(data) { chart.series[0].setData(data.data)
function requestData(chart, from, to, group) {
$.ajax({
url: '/stats/chart?from='+from+'&to='+to+'&group='+group,
success: function(data) {
chart.series[0].setData(data.data);
chart.series[0].pointStart = data.start;
chart.series[0].pointInterval = data.interval;
},
cache: false
});
}
js函数执行ajax调用,并将返回如下内容:-
{
"start":1358467200000,
"interval":86400000,
"data":[24,9,46,66,19,93,11,10,66,75,70,52,35,91,69,0,50,24,5,14,83,9,26,5,53,32,27,30,34,25,57,100]
}
如何更新图表的pointStart和pointInterval值?
图表。系列[0]
没有可编辑的pointStart
或pointInterval
属性。您需要通过动态方法(如chart.series[0].setData()
)分配这些值,并创建一个完整的options
对象(现在您只发送值data.data
,该值是函数可接受的参数,但它也可以接受一个对象,并且用于)
我建议更改json对象以匹配options
对象的形式:
{
"pointStart":1358467200000,
"pointInterval":86400000,
"data":[24,9,46,66,19,93,11,10,66,75,70,52,35,91,69,0,50,24,5,14,83,9,26,5,53,32,27,30,34,25,57,100]
}
然后将json对象直接发送到
chart.series[0].setData(data)
我编辑了原始问题,以显示一个解释该问题的JSFIDLE示例,但我将提供一个有效的解决方案
在我的解决方案中,图表不必完全重新初始化,但所有系列都将被删除,然后通过chart.addSeries()
方法添加新系列。我觉得Series.setData()
会更有效率,但我不知道如何让它工作——也许有人会
我当前的解决方案(糟糕透了):
因此,在对原始海报的回答中,正如@jacobdolton的回答所述,您必须更改json对象以匹配options
对象的形式,然后将这些对象提供给Chart.setData()
函数
此外,您可能会注意到
false
参数Series.remove(false)
和Chart.addSeries(false)
-这些参数确保在每次调用时不会重新检索图表,并且之后可以调用单个Chart.redraw()
,以保存处理过程。自Highcharts 3以来,您可以使用:
您当前的
成功
功能的结果是什么?当您console.log(data)
在其中时会发生什么?服务器是否在响应的标题中设置了mimetype?绘制了新的绘图,但轴标签没有更改为正确的日期。我使用头类型Content type:application/json.ok返回数据,因此对象返回并被正确识别和解析为json,这意味着这几乎肯定是一个highcharts问题。尝试使用动态方法。
chart.series[0].update({
pointStart: data.start
pointInterval: data.interval,
data: data.data
}, false); // true if you want redraw