Перезагрузить данные диаграммы через JSON с помощью Highcharts

Я пытаюсь перезагрузить данные для диаграммы Highcharts через JSON на основе нажатия кнопки в другом месте страницы. Сначала я хотел бы отобразить набор данных по умолчанию (расходы по категориям), но затем загрузить новые данные на основе ввода данных пользователем (например, расходы по месяцам). Самый простой способ, который я могу придумать для вывода JSON с сервера, - это передать запрос GET на страницу PHP, например $. Get ('/ dough / includes / live-chart.php? Mode = month' , извлекая это значение из атрибута идентификатора кнопки.

Вот что у меня есть до сих пор, чтобы получить данные по умолчанию (расходы по категориям). Нужно найти, как загрузить совершенно разные данные в круговую диаграмму на основе пользовательский ввод, по запросу:

$(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);
        });
        });

Любая помощь будет принята с благодарностью

ИЗМЕНИТЬ

Вот обновленный 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);
            });
        });
    });

РЕДАКТИРОВАТЬ 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
44
задан NightMICU 18 November 2010 в 23:56
поделиться