Jquery 动态设置Highcharts系列和类别数据
我正在尝试使用以下代码通过AJAX调用更新图表Jquery 动态设置Highcharts系列和类别数据,jquery,highcharts,Jquery,Highcharts,我正在尝试使用以下代码通过AJAX调用更新图表 $j(document).ready(function () { $j("#filter").click(function () { BuildReport(); }); $j("#container").highcharts({ chart: { type: 'column', marginRight: 130, ma
$j(document).ready(function () {
$j("#filter").click(function () {
BuildReport();
});
$j("#container").highcharts({
chart: {
type: 'column',
marginRight: 130,
marginBottom: 100
},
title: {
text: 'SEs open by Group',
x: -20 //center
},
yAxis: {
title: {
text: ''
},
min: 0,
allowDecimals: false
},
xAxis: {},
tooltip: {
formatter: function () {
return '<b>' + this.x + '</b><br/>' +
this.series.name + ': ' + this.y + '<br/>' +
'Total: ' + this.point.stackTotal;
}
},
plotOptions: {
column: {
stacking: 'normal',
cursor: 'pointer',
}
}
},
legend: {
layout: 'vertical',
align: 'right',
verticalAlign: 'top',
x: -10,
y: 100,
borderWidth: 0
},
series: {}
});
BuildReport();
});
function SetChartSeries(series) {
debugger;
chart = $j("#container").highcharts();
chart.xAxis[0].setCategories(getReportCategories(series));
chart.series = $j.map(series, function (item) {
return {
name: item.Name,
color: item.Colour,
data: $j.map(item.Items, function (list) {
return {
name: list.Category,
y: list.Value,
id: list.ID
};
})
};
});
}
function getReportCategories(data) {
var catArray = [];
$j.each(data, function (index, value) {
$j.each(value.Items, function (index, value) {
if ($j.inArray(value.Category, catArray)) {
catArray.push(value.Category);
}
});
});
return catArray;
}
function BuildReport() {
$j.ajax({
url: "ChartDataHandler.ashx",
dataType: "json",
cache: false,
success: function (data) {
SetChartSeries(data.Series);
}
});
}
$j(文档).ready(函数(){
$j(“#过滤器”)。单击(函数(){
BuildReport();
});
$j(“#容器”)。海图({
图表:{
键入:“列”,
marginRight:130,
marginBottom:100
},
标题:{
文本:“SEs按组打开”,
x:-20/中心
},
亚克斯:{
标题:{
文本:“”
},
分:0,,
allowDecimals:false
},
xAxis:{},
工具提示:{
格式化程序:函数(){
返回“+this.x+”
+
this.series.name+':'+this.y+'
+
“总计:”+this.point.stackTotal;
}
},
打印选项:{
专栏:{
堆叠:“正常”,
光标:“指针”,
}
}
},
图例:{
布局:“垂直”,
对齐:“右”,
垂直排列:“顶部”,
x:-10,
y:100,
边框宽度:0
},
系列:{}
});
BuildReport();
});
函数设置图表系列(系列){
调试器;
chart=$j(“#容器”).highcharts();
chart.xAxis[0].setCategories(getReportCategories(series));
chart.series=$j.map(系列,函数(项){
返回{
名称:item.name,
颜色:项目。颜色,
数据:$j.map(item.Items,函数(列表){
返回{
名称:列表。类别,
y:列表。值,
id:list.id
};
})
};
});
}
函数getReportCategories(数据){
var-catArray=[];
$j.每个(数据、函数(索引、值){
$j.each(值、项、函数(索引、值){
如果($j.inArray(value.catArray、catArray)){
catArray.push(value.Category);
}
});
});
返回混乱;
}
函数BuildReport(){
$j.ajax({
url:“ChartDataHandler.ashx”,
数据类型:“json”,
cache:false,
成功:功能(数据){
SetChartSeries(数据系列);
}
});
}
当页面加载或单击过滤器按钮时,BuildReport调用处理程序并将序列数据传递给SetChartSeries。从这里我可以看到图表属性已设置,但图表从未绘制。我做错了什么吗?如果你想创建新的系列,你需要使用这个方法 如果要在现有系列中设置新数据,则需要使用 方法
如我所见,您可以为每个请求创建新的序列,并使用
addSeries
方法如果要动态设置类别数据,则需要使用Axis.update()方法
下面是我动态更新系列的步骤。默认行为将重新绘制图表。检查
您是否尝试将AJAX方法更改为POST?这似乎不是问题所在。数据从AJAX调用中恢复良好。之前,我在ajax调用的成功处理程序中使用series和category属性创建图表,效果很好,但我更愿意只创建一次图表,然后使用每个新的ajax调用更新类别和系列数据。我遇到了一些麻烦,直到我进一步了解Highcharts的工作原理。也许重新绘制图表?chart.redraw()在创建图表时使用
chart.addSeries(object)
,在设置数据时使用chart.series[index].setData(array)
<代码>图表.系列=代码>什么都不做。
chart.xAxis[0].update({categories:arrayname,tickInterval:20},true);
$('#YourContainer').highcharts().update( {
series:[{
name: 'New Legend',
data: [{
name: 'New Category',
y: data
}]
]}
})