我正在为学校网站制作一个图表,它使用JSON变量作为图表的数据。
JSON数组中的每个变量都包含一行的所有信息:
{
fillColor : "rgba(55, 171, 200, 1)",
strokeColor : document.getElementById('chosen-color').value,
pointColor : "rgba(220,55,220, 1)",
pointStrokeColor : "#fff",
data : [
<?// Data
$values = getValues("btc_30");
for($i = 0; $i<sizeof($values); $i++){
print $values[$i];
if ($i != sizeof($values)-1){print ", ";}
}
?>
]
}
现在我想让HTML表单能够向图表添加更多行,这意味着如果添加新行,则需要增加数据集JSON数组。 我有一个JavaScript:
var boxes = document.getElementsByClassName('box');
for(var x = 0; x<boxes.length; x++){
if(boxes[x].checked == true){
data.datasets[x].fillColor = "rgba(55, 171, 200, 1)";
data.datasets[x].strokeColor = document.getElementById('chosen-color').value;
data.datasets[x].pointColor = "rgba(55, 171, 200, 1)";
data.datasets[x].data = [
<?// Data
$values = getValues("xrp_30");
for($i = 0; $i<sizeof($values); $i++){
print $values[$i];
if ($i != sizeof($values)-1){print ", ";}
}
?>
]
}
}
但它不允许我访问尚不存在的数据集[x],所以现在我的问题是如何增加JSON数组数据?
编辑:我修好了,感谢phill's,Chausser和Wolfgang Stengel的演出。最好的方法是:var boxes = document.getElementsByClassName('box');
for(var x = 0; x<boxes.length; x++){
if(boxes[x].checked == true){
data.datasets[x] = {
fillColor: "rgba(55, 171, 200, 1)",
strokeColor: document.getElementById('chosen-color').value,
pointColor: "rgba(55, 171, 200, 1)",
data: <?= json_encode(getValues('xrp_30')) ?>
};
}
}
我甚至不知道我能做到这一点<?= json_encode(getValues('xrp_30')) ?>
......猜猜我也学到了别的东西:)
答案 0 :(得分:0)
这或许
data.datasets[x] = {
fillColor: "rgba(55, 171, 200, 1)",
strokeColor: document.getElementById('chosen-color').value,
pointColor: "rgba(55, 171, 200, 1)",
data: <?= json_encode(getValues('xrp_30')) ?>
};
答案 1 :(得分:0)
如果数据集对象没有创建,则检查数据集对象是否存在,然后设置数据。如果未选中此框,请取消设置数据。
var boxes = document.getElementsByClassName('box');
for(var x = 0; x<boxes.length; x++){
if(boxes[x].checked == true){
if(data.datasets[x] == "undefined"){
//Check that the dataset exists, create it if it doesnt.
data.datasets[x]={};
}
data.datasets[x].fillColor = "rgba(55, 171, 200, 1)";
data.datasets[x].strokeColor = document.getElementById('chosen-color').value;
data.datasets[x].pointColor = "rgba(55, 171, 200, 1)";
// php short code for echo "<?= ?>"
// then use php's function json_encode to turn the array into a json object
data.datasets[x].data = <?= json_encode(getValues("xrp_30")); ?>;
}
else{
//Unset the dataset if the box isnt checked.
data.datasets[x] = {};
}
}