有没有办法在没有eval的情况下输入Highchart系列数据?

时间:2013-07-20 14:52:44

标签: javascript highcharts eval

我一直在努力将数据放入高级图表中,而且非常困难。

最终我不得不使用eval(数据)。

有更好的方法吗?

JSFiddle Example

$(function () {
    var test = "[[Date.UTC(2013, 4, 08), 45.95],[Date.UTC(2013, 5, 28), 19.95]]"; 
    $('#container').highcharts({
        chart: {
        },
        xAxis: {
            type: 'datetime'
        },

        series: [{
            data: eval(test)
        }]
    });
});

更新1

我的实际目标是将一个JSON对象传递给一个函数(如下所示),然后获取所需的字符串并将它们传递给系列输入。

以下内容仍无效。

function showPriceChart(priceData) {

    var json = jQuery.parseJSON(priceData);
    var pricePrices = [ json.pricePrices ];

            // This works if I use eval below
            // var pricePrices = '['+json.pricePrices+']';


    /// Other chart config goes here

    series: [{
            name: 'Retailer Price',
            data: pricePrices
        }, {
            name: 'RRP',
            data: rrpPrices
        }]
    });
    }

这是来自php的JSON对象,使用print_r():

{"pricePrices":"[Date.UTC(2013, 4, 8), 67],[Date.UTC(2013, 5, 28), 29]","salePrices":"[Date.UTC(2013, 4, 8), ],[Date.UTC(2013, 5, 28), ]","rrpPrices":"[Date.UTC(2013, 4, 8), 67],[Date.UTC(2013, 5, 28), 67]"}

2 个答案:

答案 0 :(得分:0)

你真的很接近你的目标。 以下是有效的:

http://jsfiddle.net/G6jrU/3/

$(function () {

    var test =[ [ Date.UTC(2013, 4, 08),  45.95 ], 
                [ Date.UTC(2013, 5, 28), 19.95  ]  ];


    $('#container').highcharts({
        chart: {
        },
        xAxis: {
            type: 'datetime'
        },

        series: [{ data : test }]

    });
});

Rq:如果需要,可以使用JSON序列化/反序列化数据。

答案 1 :(得分:0)

问题是您使用的是Date.UTC()函数,因此需要使用eval。如何传递数字(以毫秒为单位的时间戳)而不是那些函数?所以,你的JSON应该是这样的:

{
 "pricePrices":[1367971200000, 67],[1372377600000, 29],
 "salePrices":[1367971200000, ],[1372377600000, ], //where are values ?!
 "rrpPrices":[1367971200000, 67],[1372377600000, 67] //without extra '"'!! 
}

此外,第二个系列还有一些缺失值,它们在哪里?