Nig*_*ICU 44 jquery json highcharts
我正在尝试通过JSON重新加载Highcharts图表的数据,基于页面中其他位置的按钮单击.最初我想显示一组默认数据(按类别支出),然后根据用户输入加载新数据(例如,按月支出).我能想到从服务器输出JSON的最简单方法是将GET请求传递给PHP页面,例如$ .get('/ dough/includes/live-chart.php?mode = month',检索这个按钮的ID属性中的值.
这是我到目前为止检索默认数据(按类别支出).需要找到如何根据用户输入按需将完全不同的数据加载到饼图中:
$(document).ready(function() {
//This is an example of how I would retrieve the value for the button
$(".clickMe").click(function() {
var clickID = $(this).attr("id");
});
var options = {
chart: {
renderTo: 'graph-container',
margin: [10, 175, 40, 40]
},
title: {
text: 'Spending by Category'
},
plotArea: {
shadow: null,
borderWidth: null,
backgroundColor: null
},
tooltip: {
formatter: function() {
return '<b>'+ this.point.name +'</b>: $'+ this.y;
}
},
credits: {
enabled: false
},
plotOptions: {
pie: {
allowPointSelect: true,
cursor: 'pointer',
dataLabels: {
enabled: true,
formatter: function() {
if (this.y > 5) return '$' + this.y;
},
color: 'white',
style: {
font: '13px Trebuchet MS, Verdana, sans-serif'
}
}
}
},
legend: {
layout: 'vertical',
style: {
left: 'auto',
bottom: 'auto',
right: '50px',
top: '100px'
}
},
series: [{
type: 'pie',
name: 'Spending',
data: []
}]
};
$.get('/dough/includes/live-chart.php', function(data) {
var lines = data.split('\n');
$.each(lines, function(lineNo, line) {
var items = line.split(',');
var data = {};
$.each(items, function(itemNo, item) {
if (itemNo === 0) {
data.name = item;
} else {
data.y = parseFloat(item);
}
});
options.series[0].data.push(data);
});
// Create the chart
var chart = new Highcharts.Chart(options);
});
});
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激
编辑
这是更新的Javascript,感谢Robodude.约翰,你让我走在正确的轨道上 - 谢谢!我现在不知道如何从AJAX请求中替换图表上的数据.我必须承认$ .get()之后的代码很可能来自示例代码,我不完全了解它运行时会发生什么 - 也许有更好的方法来格式化数据?
我能够取得一些进展,因为图表现在可以加载新数据,但它已添加到已经存在的数据之上.我怀疑罪魁祸首就是这条线:
options.series[0].data.push(data);
Run Code Online (Sandbox Code Playgroud)
我尝试过options.series [0] .setData(data); 但没有任何反应.从好的方面来说,AJAX请求可以根据选择菜单的值完美运行,并且没有Javascript错误.这是有问题的代码,没有图表选项:
$.get('/dough/includes/live-chart.php?mode=cat', function(data) {
var lines = data.split('\n');
$.each(lines, function(lineNo, line) {
var items = line.split(',');
var data = {};
$.each(items, function(itemNo, item) {
if (itemNo === 0) {
data.name = item;
} else {
data.y = parseFloat(item);
}
});
options.series[0].data.push(data);
});
// Create the chart
var chart = new Highcharts.Chart(options);
});
$("#loadChart").click(function() {
var loadChartData = $("#chartCat").val();
$.get('/dough/includes/live-chart.php?mode=' + loadChartData, function(data) {
var lines = data.split('\n');
$.each(lines, function(lineNo, line) {
var items = line.split(',');
var data = {};
$.each(items, function(itemNo, item) {
if (itemNo === 0) {
data.name = item;
} else {
data.y = parseFloat(item);
}
});
options.series[0].data.push(data);
});
// Create the chart
var chart = new Highcharts.Chart(options);
});
});
});
Run Code Online (Sandbox Code Playgroud)
编辑2 这是图表所依据的格式 - 非常简单,类别名称和值,每个后面都有\n.
Coffee, 4.08
Dining Out, 5.05
Dining: ODU, 5.97
Dining: Work, 38.41
Entertainment, 4.14
Gas, 79.65
Groceries, 228.23
Household, 11.21
Misc, 12.20
Snacks, 20.27
Run Code Online (Sandbox Code Playgroud)
jsp*_*ner 103
其他答案对我不起作用.我在他们的文档中找到了答案:
http://api.highcharts.com/highcharts#Series
使用此方法(请参阅JSFiddle示例):
var chart = new Highcharts.Chart({
chart: {
renderTo: 'container'
},
series: [{
data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]
}]
});
// the button action
$('#button').click(function() {
chart.series[0].setData([129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4, 29.9, 71.5, 106.4] );
});
Run Code Online (Sandbox Code Playgroud)
Rob*_*ozo 20
编辑:下面的响应更正确!
http://www.highcharts.com/ref/#series-object
HTML:
<SELECT id="list">
<OPTION VALUE="A">Data Set A
<OPTION VALUE="B">Data Set B
</SELECT>
<button id="change">Refresh Table</button>
<div id="container" style="height: 400px"></div>
Run Code Online (Sandbox Code Playgroud)
使用Javascript:
var options = {
chart: {
renderTo: 'container',
defaultSeriesType: 'spline'
},
series: []
};
$("#change").click(function() {
if ($("#list").val() == "A") {
options.series = [{name: 'A', data: [1,2,3,2,1]}]
// $.get('/dough/includes/live-chart.php?mode=month'
} else {
options.series = [{name: 'B', data: [3,2,1,2,3]}]
// $.get('/dough/includes/live-chart.php?mode=newmode'
}
var chart = new Highcharts.Chart(options);
});
Run Code Online (Sandbox Code Playgroud)
这是一个非常简单的例子,因为我这里没有我的文件,但基本的想法是每次用户为他们想要看到的东西选择新选项时,你将要替换.series数据对象使用服务器中的新信息,然后使用新的Highcharts.Chart();重新创建图表.
希望这可以帮助!约翰
编辑:
看看这个,它来自我过去曾经做过的事情:
$("table#tblGeneralInfo2 > tbody > tr").each(function (index) {
if (index != 0) {
var chartnumbervalue = parseInt($(this).find("td:last").text());
var charttextvalue = $(this).find("td:first").text();
chartoptions.series[0].data.push([charttextvalue, chartnumbervalue]);
}
});
Run Code Online (Sandbox Code Playgroud)
我有一个表格,其中包含我需要添加到饼图中的第一个和最后一个tds的信息.我遍历每一行并推入值.注意:我使用chartoptions.series [0] .data,因为饼图只有1个系列.
| 归档时间: |
|
| 查看次数: |
152949 次 |
| 最近记录: |