Estoy tratando de volver a cargar los datos para un gráfico de Highcharts a través de JSON basado en un botón, haga clic en otro lugar de la página. Inicialmente me gustaría mostrar un conjunto predeterminado de datos (gasto por categoría) pero luego cargar nuevos datos basados en la entrada del usuario (gasto por mes, por ejemplo). La forma más fácil que se me ocurre para generar el JSON desde el servidor es pasando una solicitud GET a la página PHP, por ejemplo $ .get ('/ dough/includes/live-chart.php? Mode = month', recuperando este valor del atributo ID del botónRecargar los datos del gráfico a través de JSON con Highcharts
Esto es lo que tengo hasta ahora para recuperar los datos por defecto (gasto por categoría). Necesito encontrar cómo cargar datos completamente diferentes en el gráfico circular, en función de la entrada del usuario. 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);
});
});
Cualquier ayuda sería muy apreciada
EDITAR
Aquí está el Javascript actualizado gracias a Robodude. John, me tienes en el camino correcto aquí, ¡gracias! Ahora estoy atascado con cómo reemplazar los datos en el gráfico de la solicitud AJAX. Debo admitir que el código que sigue a $ .get() probablemente provenga del código de muestra, no entiendo completamente qué está sucediendo cuando se ejecuta; ¿quizás haya una forma mejor de formatear los datos?
Pude hacer algunos progresos ya que ahora el gráfico carga nuevos datos, pero se agrega a lo que ya existe. Sospecho que el culpable es esta línea:
options.series[0].data.push(data);
Probé options.series [0] .setData (datos); pero nada pasa. En el lado positivo, la solicitud de AJAX funciona de manera impecable en función del valor del menú de selección y no hay errores de Javascript. Aquí está el código en cuestión, sans trazar opciones:
$.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 Este es el formato que el gráfico está tirando de - muy simple, nombre de la categoría y el valor con \ n después de cada uno.
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
Tomé el código que escribí y lo puso en jsFiddle para su conveniencia: http://jsfiddle.net/EmMxH/ – Robodude
Hola de nuevo NightMICU! Lo siento, no tengo mucho tiempo para explicar lo que está pasando, pero mira esto: http://jsfiddle.net/w4DKf/ ¿Cuál es el formato de los datos que están volviendo? ¡Recuerde que cada valor de su gráfico circular forma parte de una matriz que forma parte de la matriz de datos de Highcharts que forma parte de la serie en serie! – Robodude
John, creo que tal vez el problema aquí es el formato de los datos del gráfico. No es JSON y supongo que debe ser? Si cambio el resultado del archivo PHP a JSON, ¿cómo lo incluiría en el Javascript? – NightMICU