将json_encode传递给chart.js不会起作用

时间:2016-07-08 14:20:08

标签: javascript php json chart.js

我尝试使用chart.js(最新版本)创建饼图。

我制作了一个数组,我想将其作为图表的数据变量输出。

那是PHP代码:

<?php if($os != null) {
   $tiposOs = array('Orçamento'=> "#5DC1E3",
                    'Aberto'=> "#07D7F7",
                    'Faturado' => "#07F7CB",
                    'Em Andamento' => "#FFD724",
                    'Finalizado' => "#30C70A",
                    'Cancelado' => "#FF2B2B");
    $chartOsData = array();
    $chartOsData['type'] = 'pie';
    $chartOsData['data'] = array();
    $chartOsData['options'] = array('responsive'=>true);

    foreach ($os as $o)
    {
        $chartOsData['data']['labels'][] = $o->status;
        $chartOsData['data']['datasets']['data'][] = (int)$o->total;
        $chartOsData['data']['datasets']['backgroundColor'][] = $tiposOs[$o->status];
    }
?>

这是我的脚本,带有编码值:

<script type="text/javascript">
    $(document).ready(function(){
        var osChartc = document.getElementById('osChart').getContext('2d');
        var osChart = new Chart(osChartc, <?php echo json_encode($chartOsData); ?>);
    });
</script>

根据documentation,您可以创建图表:

var myDoughnutChart = new Chart(ctx, {
    type: 'pie',
    data: data,
    options: options
});

这是数据变量的输入类型:

var data = {
    labels: [
        "Red",
        "Blue",
        "Yellow"
    ],
    datasets: [
        {
            data: [300, 50, 100],
            backgroundColor: [
                "#FF6384",
                "#36A2EB",
                "#FFCE56"
            ],
            hoverBackgroundColor: [
                "#FF6384",
                "#36A2EB",
                "#FFCE56"
            ]
        }]
};

这就是我得到的:

$(document).ready(function() {
    var osChartc = document.getElementById('osChart').getContext('2d');
    var osChart = new Chart(osChartc,{
        "type": "pie",
        "data": {
            "labels": ["Aberto", "Em Andamento"],
            "datasets": {
                "data": [1, 1],
                "backgroundColor": ["#07D7F7", "#FFD724"]
            }
        },
        "options": {
            "responsive": true
        }
    });
});

我相信数组格式是正确的,除了键周围有引号,数据集上没有方括号。

图表未构建,我收到此错误:

  

未捕获的TypeError:无法读取属性&#39;长度&#39;未定义的

可以做些什么?

1 个答案:

答案 0 :(得分:2)

$chartOsData['data']['datasets']['data'][] = (int)$o->total;
$chartOsData['data']['datasets']['backgroundColor'][] = $tiposOs[$o->status];

您可以使用[{1}}和datasets键将data构建为对象。

backgroundColor

此处您显示datasets: [ { data: [300, 50, 100], backgroundColor: [...], } ] 应该是数组,其中包含一个包含这些键的对象。

修复很简单:make datasets是一个数组:

datasets