错误:第一行不是数组。谷歌饼图

Posted

技术标签:

【中文标题】错误:第一行不是数组。谷歌饼图【英文标题】:Error: First row is not an array. Google Pie Chart 【发布时间】:2018-09-30 08:20:57 【问题描述】:

我正在尝试使用 Google 饼图。我正在通过我的 API 调用将数据提供给图表。我正在使用 ASP.NET Page 来完成这项工作。以下是页面的完整代码。

"[\"AuditStatusId\":2,\"Number\":5,\"AuditStatusId\":3,\"Number\":1, 
\"AuditStatusId\":19,\"Number\":1,\"AuditStatusId\":23,\"Number\":27, 
\"AuditStatusId\":24,\"Number\":2,\"AuditStatusId\":27,\"Number\":1, 
\"AuditStatusId\":31,\"Number\":1,\"AuditStatusId\":38,\"Number\":1]"

我的 API 正在返回上述数据。

我在每个循环中的以下代码中做一些工作,以将我的数据转换为数组。但这仍然不起作用。

[['Task', 'Hours per Day'], ['2', 5], ['3', 1], ['19', 1], ['23', 27], ['24', 2], ['27', 1], ['31', 1], ['38', 1]]

上面的这个字符串是由self格式化的,如果我把这个静态放在arrayToDataTable方法中,它可以工作,但是如果我在方法中给出变量名,我会得到错误"错误:第一行不是数组。”

<script type="text/javascript">
var data01 = "[['Task', 'Hours per Day']";
google.charts.load('current',  'packages': ['corechart'] );
google.charts.setOnLoadCallback(drawChart);

function drawChart() 

    $.ajax(
        type: 'GET',
        url: 'http://class.localtest.me/api/dashboard/chartdata',
        dataType: 'json',
        async: false,
        contentType: "application/json; charset=utf-8",
        data: ,
        success: function (result) 
            $.each(JSON.parse(result), function (data, value) 
                data01 = data01.concat(',[\'' + value.AuditStatusId + '\',' + value.Number + ']');
            )

            data01 = data01.concat(']');

        ,
        error: function (xhr, status, error) 
            alert(error);
        
    );

    //var data = new google.visualization.DataTable([['Task', 'Hours per Day'], ['2', 5], ['3', 1], ['19', 1], ['23', 27], ['24', 2], ['27', 1], ['31', 1], ['38', 1]]);
    var arr = $.makeArray(data01);
    console.log(arr);
    var data = new google.visualization.arrayToDataTable(arr);


    var options = 
        title: 'My Assessments'
    ;

    var chart = new google.visualization.PieChart(document.getElementById('piechart'));

    chart.draw(data, options);

【问题讨论】:

【参考方案1】:

看起来您正在尝试使用字符串构建数组, 只需使用一个实际的数组...

var data01 = [['Task', 'Hours per Day']];

$.each(result, function (data, value) 
    data01.push([value.AuditStatusId.toString(), value.Number]);
)

这就是你所需要的


请参阅以下工作 sn-p... (数据已经硬编码在fail回调中,可以去掉)

var data01 = [['Task', 'Hours per Day']];
google.charts.load('current',  'packages': ['corechart'] );
google.charts.setOnLoadCallback(drawChart);

function drawChart() 

    $.ajax(
        type: 'GET',
        url: 'http://class.localtest.me/api/dashboard/chartdata',
        dataType: 'json',
        contentType: "application/json; charset=utf-8",
        data: 
    ).done(function (result) 
        loadData(result);
    ).fail(function (jqXHR, textStatus, errorThrown) 
        var result = "[\"AuditStatusId\":2,\"Number\":5,\"AuditStatusId\":3,\"Number\":1, \"AuditStatusId\":19,\"Number\":1,\"AuditStatusId\":23,\"Number\":27, \"AuditStatusId\":24,\"Number\":2,\"AuditStatusId\":27,\"Number\":1, \"AuditStatusId\":31,\"Number\":1,\"AuditStatusId\":38,\"Number\":1]";
        loadData(JSON.parse(result));
    );

    function loadData(result) 
      $.each(result, function (data, value) 
          data01.push([value.AuditStatusId.toString(), value.Number]);
      )

      var data = new google.visualization.arrayToDataTable(data01);
      var options = 
          title: 'My Assessments'
      ;

      var chart = new google.visualization.PieChart(document.getElementById('piechart'));
      chart.draw(data, options);
    

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="piechart"></div>

注释:

1) async: false 已被弃用

【讨论】:

我怎样才能使这个异步?

以上是关于错误:第一行不是数组。谷歌饼图的主要内容,如果未能解决你的问题,请参考以下文章

谷歌饼图图例导航图标颜色

切片颜色的谷歌饼图动画

饼图饼图在Highcharts

从 javascript 将迷你图饼图添加到 Jquery DataTable

jquery实现柱形图饼图等

OpenGL——折线图柱状图饼图绘制