5

我正在尝试使用 jQuery 从 xml 源填充 highchart 系列。XML 文件是从 RRDTool 导出的,格式如下:

<data>
<row><t>1347559200</t><v>2.1600000000e+01</v></row>
<row><t>1347562800</t><v>2.1504694630e+01</v></row>
<row><t>1347566400</t><v>2.1278633024e+01</v></row>
.
.
.
</data>

我的方法是使用 jQuery 加载数据并将系列推送到图表:

$.ajax({
      type: "GET",
      url: "data/data.xml",
      dataType: "xml",
      success: function(xml) {
        var series = {  data: []
                    };

        $(xml).find("row").each(function()
        {
            var t = parseInt($(this).find("t").text())*1000
            var v = parseFloat($(this).find("v").text())
            series.data.push([t,v]);
        });
        options.series.push(series);
      }
  });

我最终收到以下错误:

意外值 NaN 解析 y 属性

我创建了一个 JSFiddle 来演示代码:http: //jsfiddle.net/GN56f/

4

2 回答 2

2

除了跨域问题外,错误是由于绘图选项中存在现有的空系列。选项中的初始系列应设置为:

series: []

代替:

系列:[{名称:'温度',数据:[]}]

随后的调用options.series.push(series);仅添加一个新系列,而空的系列保持不变。

于 2012-09-14T21:12:47.940 回答
2

问题:

  • var你在声明之前忘记optionschart
  • ;结束后忘记了options
  • optionsHava 您在传递给之前尝试过登录Highcharts吗?您正在通过以下series.

这是预期的结果?我想不是。

series: [{
    name: 'Temperature',
    data: []
}, {
    data: [// data from xml]
}]
  • 你是在完成请求之前创建图表,所以options.series.data.push不行,你必须使用setData动态更新,但是有一个问题,你不知道你的请求需要多长时间,所以我建议你创建图表里面success

试试下面的。

success: function(xml) {
    $('row', xml).each(function() {
        options.series.data.push([t,v]);
    });
    //@todo: declare chart as global before the ajax function
    chart = new Highcharts.Chart(options);
}
于 2012-09-15T00:40:44.987 回答