Я пытаюсь перезагрузить данные для диаграммы Highcharts через JSON на основе нажатия кнопки в другом месте на странице. Первоначально я хотел бы отображать набор данных по умолчанию (расходы по категориям), но затем загружать новые данные на основе пользовательского ввода (например, расходы за месяц). Самый простой способ, с помощью которого я могу представить JSON с сервера, - передать запрос GET на страницу PHP, например $ .get ('/ dough/includes/live-chart.php? Mode = month', извлечение этого значения из атрибута идентификатора кнопки.Перезагрузите данные диаграммы через JSON с Highcharts
Вот что я получил до сих пор, чтобы получить данные по умолчанию (расходы по категориям). Необходимо найти, как загружать совершенно разные данные в круговую диаграмму на основе пользовательского ввода, по запросу:
$(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);
});
});
Любая помощь будет принята с благодарностью
EDIT
Это обновленный Javascript благодаря Robodude. Джон, ты меня здесь на правильном пути - спасибо! Я теперь застрял в том, как заменить данные на диаграмме на запрос AJAX. Должен признать, что код, следующий за $ .get(), скорее всего, из примера кода, я не совсем понимаю, что происходит, когда он запускается - возможно, есть лучший способ отформатировать данные?
Мне удалось добиться определенного прогресса в том, что график теперь загружает новые данные, но добавляется поверх того, что уже существует. Я подозреваю, что виновником этой линии:
options.series[0].data.push(data);
Я попытался options.series [0] .setData (данные); но ничего не происходит. С яркой стороны запрос 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);
});
});
});
EDIT 2 Это формат, что диаграмма вытягивает из - очень простой, категории имени и значения с \ п после каждого.
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
Я взял код, который я написал и положил его на jsfiddle для вашего удобства: http://jsfiddle.net/EmMxH/ – Robodude
Эй снова NightMICU! Мне жаль, что у меня мало времени, чтобы объяснить, что происходит, но проверьте это: http://jsfiddle.net/w4DKf/ Каков формат возвращаемых данных? Просто помните, что каждое значение для вашей круговой диаграммы является частью массива, который является частью массива данных высоких диаграмм, который является частью массива рядов! – Robodude
Джон, я думаю, что, возможно, здесь речь идет о формате данных диаграммы. Это не JSON, и я предполагаю, что это должно быть? Если я изменил вывод из файла PHP в JSON, как бы включить его в Javascript? – NightMICU