【问题标题】:use jquery-datatable data source for generating google visualization chart使用jquery-datatable数据源生成google可视化图表
【发布时间】:2014-11-26 08:44:08
【问题描述】:

我不太熟悉 javascript。我有一个使用 ajax 调用加载的 jquery 数据表,如下所示:

$('#table').dataTable( {
    "processing": true,
    "serverSide": true,
    "ajax": "http://api.mywebsite.com/report",
            "columns": [
        { "data": "date" },
        { "data": "ordernumber" },
        { "data": "totalsales" },
        { "data": "subtotal" }
           ]
} );

我想将数据表与谷歌图表一起加载,但我不知道如何从上面的数据表初始化获取数据对象到下面的谷歌代码,并在每次重新填充数据表时触发相同的例程:

google.setOnLoadCallback(drawChart);
  function drawChart() {
    var data = google.visualization.arrayToDataTable([
      ['Date', 'Sales'],
      ['20 Jan - Feb 04',  10340 ],
      ['20 Feb - Mar 05',  23470 ],
      ['20 June - Dec 06',  450 ],
      ['20 Mar - Aug 07',  3030 ]
    ]);

    var options = {
      title: 'Company Performance'
    };

    var chart = new google.visualization.LineChart(document.getElementById('chart_div'));

    chart.draw(data, options);
  }

下面有什么方法可以替换

     `['Date', 'Sales'],
      ['20 Jan - Feb 04',  10340 ],
      ['20 Feb - Mar 05',  23470 ],
      ['20 June - Dec 06',  450 ],
      ['20 Mar - Aug 07',  3030 ]`

类似:

dataTable.data[date]

【问题讨论】:

    标签: javascript jquery google-visualization jquery-datatables


    【解决方案1】:

    这很容易。我注意到您使用的是 dataTables 1.10.x,然后您可以使用 API 来迭代每一行,并构建一个数据数组 google 可视化将使用:

    $("#buildChart").click(function() {
        var dataArray = [];
        dataArray.push([ 'date', 'totalsales' ]);
        table.rows().data().each(function(value, index) {
            dataArray.push([ value.date, value.totalsales ]);
        });
        drawChart(dataArray);
    });
    

    并且被调用的drawChart 函数与您的问题中的函数非常相似:

    function drawChart(dataArray) {
        var data = google.visualization.arrayToDataTable(dataArray);
        var options = {
          title: 'dataTables to google visualization'
        };
        var chart = new google.visualization.LineChart(document.getElementById('chart'));
        chart.draw(data, options);
    }
    


    使用您的数据查看演示 -> http://jsfiddle.net/9wvvh8sk/

    【讨论】:

    • 嗨。谢谢,看起来不错。虽然我的数据源是 json 对象格式而不是数组。我仍在尝试使您成为数组数据源对象...:-)
    • @jkm - 没有任何区别 - click 函数根据表中的内容生成 dataArray ,这是同一件事,无论 dataTable 的数据源是什么/ 曾是。我们无法在 jsfiddle 中重现 ajax 负载,因此我使用了静态 JSON。
    • 好的。我是这么说的,因为我得到了错误:轴 #0 的数据列不能是字符串类型...
    • 我的数据看起来像这样,但我仍然收到上面的错误。 [{"date":"Dec 29 - Jan 4","ordernumber":"401","totalsales":"3","subtotal":"89390.00"},{"date":"Jan 5 - Jan 11 ","ordernumber":"403","totalsales":"12","subtotal":"18505.00"},{"date":"Jan 12 - Jan 18","ordernumber":"414","totalsales ":"2","subtotal":"5850.00"},{"date":"Jan 19 - Jan 25","ordernumber":"416","totalsales":"10","subtotal":"68159.00 "}];
    • 嘿@jkm - 这是因为你的数字被引用了,例如用“”包围并且只是插入到dataArray“原样”。然后你这样做,google.visualization.arrayToDataTable 将它们解析为字符串(它应该如何更好地知道?)。为避免这种情况,请在要导出为纯数字的字段上使用 parseInt / parseFloat。请参阅上面评论中的 JSON 更新演示 -> jsfiddle.net/w11rqc03
    猜你喜欢
    • 1970-01-01
    • 2016-02-18
    • 2012-02-11
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    相关资源
    最近更新 更多