在控制器中,我获取了数据:
$records = Products::select('price')->get();
而在Blade模板中,我想要将这些数据循环填充到图表脚本中,以便基于这些数据绘制图表:
<script>
window.onload = function () {
var chart = new CanvasJS.Chart("chartContainer", {
animationEnabled: true,
theme: "light2",
title: {
text: "简单折线图"
},
data: [{
type: "line",
indexLabelFontSize: 16,
dataPoints: [
@foreach($records as $prc)
{ y: {{ $prc->price }} },
@endforeach
]
}]
});
chart.render();
}
</script>
原始的图表脚本是硬编码的数据点:
<script>
window.onload = function () {
var chart = new CanvasJS.Chart("chartContainer", {
animationEnabled: true,
theme: "light2",
title: {
text: "简单折线图"
},
data: [{
type: "line",
indexLabelFontSize: 16,
dataPoints: [
{ y: 500 },
{ y: 400 },
{ y: 250 },
{ y: 310 }
]
}]
});
chart.render();
}
</script>
现在页面显示为空白,应该如何解决这个问题?
问题在于,你尝试在JavaScript数组中直接嵌入PHP循环输出变量。为了正确地将从数据库获取的价格数据传递给CanvasJS图表,你需要确保数据点的JSON结构有效,并且每个价格都被适当地转义以适应JavaScript环境。请尝试修改Blade模板中的dataPoints
部分,确保数据被正确包裹在引号中:
@foreach($records as $prc)
{ y: "{{ $prc->price }}" },
@endforeach
同时,请确认循环后的数据点之间是否有额外的逗号导致语法错误,通常在循环内部最后一个元素后不添加逗号可以避免这个问题:
@foreach($records as $index => $prc)
{ y: "{{ $prc->price }}" }@if(!$loop->last),@endif
@endforeach
这样,在循环到最后一个数据点时不会产生多余的逗号,确保生成的JavaScript语法有效。如果仍有问题,请检查控制台是否有任何JavaScript错误或者网络请求是否正常加载数据。