0

我不知道我在这段代码中哪里出错了。
我需要做的是使用数据库中的值绘制 HighCharts。这些值可能随时更改。
- x 轴应标记为“11 月 30 日”作为最后一个点到“10 月 30 日”作为第一个点,这意味着 30 天(我只想在 30 天显示图表)。这是一个示例,日期可能随时间变化。- JS通过ajax发送请求,结果以json格式返回。这是其中一行:{"time":"2012-08-07 21:15:05","value_1":"1.241110","value_2":"1.241103"} 该图有两条线( value_1 和 value_2 )并且都对应于 x 轴上的相同时间。
我在某处读到我必须将日期格式转换为 UTC。这是功能

function get_and_display_data(symbol_1,price_1,period_1,bars_1,constraints_1){

var highchartsOptions = Highcharts.setOptions(Highcharts.theme);

var options = {
    chart: {
        renderTo: 'graph',
        type: 'line',
        marginRight: 130,
        marginBottom: 25,
        reflow: false,
        borderWidth: 0
    },
    title: {
        text: 'Data',
        x: -20 //center
    },
    xAxis: {
        type:'datetime',
        dateTimeLabelFormats: {
            year: '%b \'%y'
        }
    },
    yAxis: {
        title: {
            text: 'This is a text !'
        },
        plotLines: [{
            value: 0,
            width: 1,
            color: '#808080'
        }]
    },
    tooltip: {
        formatter: function() {
            return '<b>'+ this.series.name +'</b><br/>'+
            Highcharts.dateFormat ('%A, %b %e, %Y', this.point.x) +': '+ this.y;
        }
    },
    legend: {
        layout: 'vertical',
        align: 'right',
        verticalAlign: 'top',
        x: -10,
        y: 100,
        borderWidth: 0
    },
    plotOptions: {
        series: {
            marker: {
                enabled: false,
                states: {
                    hover: {
                        enabled: true,
                        radius: 3
                    }
                }
            }
        }
    },
    series: [{
        name: ''
        }, {
        name: ''
    }]
}
$.ajax({
    url: url_base+"show_page/graph_data.do",
    type: 'POST',
    data: 'symbol='+symbol_1+"&price="+price_1+"&period="+period_1+"&bars="+bars_1+"&constraints="+constraints_1,
    cache: false,
    dataType: "json",
    success: function(html) {
        var data_array = [];
        var data_1 = [];
        var data_2 = [];
        var i = 0;
        var time_x_axis = [];
        var sLegend = [];
        try{
            data_array = html;
            sLegend = price_1.split(',');
            if(html == null){
                alert('No data was found. Try it again ');
            }else{
                for(i=0;i<data_array.length;i++)
                {
                    time_x_axis[i] = data_array[i]['time'];
                    data_1[i] = '['+Date.UTC(time_x_axis[i].substr(0, 4), time_x_axis[i].substr(5,2), time_x_axis[i].substr(8,2), time_x_axis[i].substr(11,2), time_x_axis[i].substr(14,2), time_x_axis[i].substr(17,2))+','+parseFloat(data_array[i]['value_1'])+']';
                    data_2[i] = '['+Date.UTC(time_x_axis[i].substr(0, 4), time_x_axis[i].substr(5,2), time_x_axis[i].substr(8,2), time_x_axis[i].substr(11,2), time_x_axis[i].substr(14,2), time_x_axis[i].substr(17,2))+','+parseFloat(data_array[i]['value_2'])+']';                        
                }
            }
        }catch(e){ }
        options.series[0].data = '['+data_1+']';
        options.series[0].name = sLegend[1];
        options.series[1].data = data_2;
        options.series[1].name = sLegend[2];
        chart = new Highcharts.Chart(options);
    }
});}

在这里,我得到了 html 变量的结果并将它们影响到 Data_array[] 。因为系列数据的格式应该是Data:[[],[],[]..[]],所以我把 *options.series[0].data = '['+data_1+']'; * .
对于 *data_1[i]*,我必须减去时间以获取年、月、日、小时、分钟和秒。
我在代码中缺少什么?

4

1 回答 1

0

您可以尝试以下更改吗?

[...,...]通过使用而不是将 data_1[i] 和 data_2[i] 设为数组'[' + ... + ',' + ... + ']'(这实际上导致字符串而不是数组)

                data_1[i] = [parseInt(Date.UTC(time_x_axis[i].substr(0, 4), time_x_axis[i].substr(5,2), time_x_axis[i].substr(8,2), time_x_axis[i].substr(11,2), time_x_axis[i].substr(14,2), time_x_axis[i].substr(17,2))),parseFloat(data_array[i]['value_1'])];
                data_2[i] = [parseInt(Date.UTC(time_x_axis[i].substr(0, 4), time_x_axis[i].substr(5,2), time_x_axis[i].substr(8,2), time_x_axis[i].substr(11,2), time_x_axis[i].substr(14,2), time_x_axis[i].substr(17,2))),parseFloat(data_array[i]['value_2'])];         

从系列数据中删除'[' + ... + ']',因为 data_1 已经是一个数组数组,您不需要使用任何连接添加方括号。由于连接,您的方法无论如何都会再次导致字符串。

    options.series[0].data = data_1;               

相关: Highcharts 返回错误 14

于 2012-10-31T20:38:53.073 回答