如何增加JSON变量长度?

时间:2014-01-13 21:37:42

标签: javascript php arrays json

我正在为学校网站制作一个图表,它使用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')) ?> ......猜猜我也学到了别的东西:)

2 个答案:

答案 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] = {};
    }
}