gpt4 book ai didi

javascript - 将 json_encode 传递给 Chart.js 将不起作用

转载 作者:行者123 更新时间:2023-12-02 14:25:44 26 4
gpt4 key购买 nike

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

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

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

Uncaught TypeError: Cannot read property 'length' of undefined

可以做什么?

最佳答案

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

在这里,您将数据集构建为带有键databackgroundColor的对象。

datasets: [
{
data: [300, 50, 100],
backgroundColor: [...],
}
]

在这里,您展示了数据集应该是一个数组,其中包含一个带有这些键的对象。

解决方法很简单:将数据集设为数组:

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

关于javascript - 将 json_encode 传递给 Chart.js 将不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38268981/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com