当前位置: 首页 > 面试题库 >

通过带有Highcharts的JSON重新加载图表数据

索瀚海
2023-03-14
问题内容

我正在尝试通过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);
        });
        });

任何帮助将不胜感激

编辑

感谢Robodude,这是更新的Javascript。约翰,您在这里让我步入正轨-谢谢!现在,我陷入了如何替换AJAX请求中图表上数据的问题。我必须承认$
.get()之后的代码很可能来自示例代码,我不完全了解运行时的情况-也许还有更好的格式化数据的方法?

我能够取得一些进展,因为该图表现在可以加载新数据,但是它是在已有数据的基础上添加的。我怀疑罪魁祸首是这条线:

options.series[0].data.push(data);

我试过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);
            });
        });
    });

编辑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

问题答案:

编辑:下面的响应更正确!

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>

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

这是一个非常简单的示例,因为我没有文件,但是基本思想是,每当用户为要查看的内容选择新选项时,都将替换.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]);
    }
});

我有一个表格,其中包含我需要添加到饼图中的第一个和最后一个tds的信息。我遍历每一行并推入值。注意:我使用chartoptions.series [0].data,因为饼图只有1个系列。



 类似资料:
  • Highcharts 曲线图 以下实例演示了异步加载数据曲线图表。这边我们通过 jQuery.getJSON() 方法从异步加载 csv 文件: 我们在前面的章节已经了解了 Highcharts 配置语法。接下来让我们来看个完整实例: 导入 data.js 文件 异步加载数据需要引入以下js 文件: <script src="http://code.highcharts.com/modules/d

  • Highcharts 曲线图 以下实例是带有数据标签曲线图表。我们在前面的章节已经了解了 Highcharts 配置语法。接下来让我们来看个完整实例: 实例 文件名:highcharts_line_labels.htm <html> <head> <meta charset="UTF-8" /> <title>Highcharts 教程</title> <script src="http://a

  • 我试图加载新数据(隐藏特定的图形),我试图函数像这里,但它不工作,我不知道我错过了什么。 我想加载一个数据(两个),但我想选择哪一个可见。 HTML JavaScript 小提琴连杆

  • 问题内容: 有人可以告诉我如何通过JavaScript修改或添加POST变量来刷新当前页面吗? 需要明确的是,我想在重新加载页面之前设置一些POST变量。 问题答案: 通过使用jQuery Ajax,您可以重新加载页面

  • 我想使用Android数据绑定设置图像。我已经阅读了很多关于这方面的教程,但图片仍然没有出现。 在我的模型中,我有以下方法: 我还应该提到“III”、“Image-”url永远不会打印,所以问题不在于Glide。 这是我的xml: maleIcon是一个url字符串