Sto tentando di ricaricare i dati per un grafico Highcharts tramite JSON in base a un clic del pulsante altrove nella pagina. Inizialmente vorrei visualizzare un insieme predefinito di dati (spesa per categoria), ma poi caricare nuovi dati in base all'input dell'utente (spesa per mese, ad esempio). Il modo più semplice con cui posso pensare di emettere il JSON dal server è passare una richiesta GET alla pagina PHP, ad esempio $ .get ('/ dough/includes/live-chart.php? Mode = month', recuperando questo valore dall'attributo ID del pulsanteRicaricare i dati del grafico tramite JSON con Highcharts
Ecco ciò che ho finora per recuperare i dati predefiniti (spesa per categoria). È necessario trovare come caricare dati completamente diversi nel grafico a torta, in base all'input dell'utente, on demand:
$(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);
});
});
Qualsiasi aiuto sarebbe molto apprezzato
EDIT
Ecco il Javascript aggiornato grazie a Robodude. John, tu hai me sulla strada giusta qui - grazie! Ora mi sto bloccando su come sostituire i dati sul grafico dalla richiesta AJAX. Devo ammettere che il codice che segue $ .get() è molto probabilmente dal codice di esempio, non capisco perfettamente cosa sta succedendo quando viene eseguito - forse c'è un modo migliore per formattare i dati?
Sono stato in grado di fare alcuni progressi in quanto il grafico ora carica nuovi dati ma è aggiunto in cima a ciò che è già lì. Ho il sospetto che il colpevole è questa linea:
options.series[0].data.push(data);
ho provato options.series [0] .setData (dati); ma non succede nulla. Sul lato positivo, la richiesta AJAX funziona perfettamente in base al valore del menu di selezione e non ci sono errori Javascript. Ecco il codice in questione, sans Opzioni grafico:
$.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 Questo è il formato che il grafico sta tirando da - molto semplice, nome della categoria e il valore con \ n dopo ogni.
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
ho preso il codice che ho scritto e messo sul jsfiddle per la vostra convenienza: http://jsfiddle.net/EmMxH/ – Robodude
nuovo Hey NightMICU! Mi dispiace di non avere molto tempo per spiegare cosa sta succedendo, ma controlla questo: http://jsfiddle.net/w4DKf/ Qual è il formato dei dati che sta tornando? Ricorda che ogni valore per il grafico a torta fa parte di un array che fa parte dell'array di dati highcharts che fa parte dell'array della serie! – Robodude
John, penso che forse il problema qui è il formato dei dati del grafico. Non è JSON e immagino che debba esserlo? Se cambio l'output dal file PHP in JSON, come dovrei includerlo nel Javascript? – NightMICU