无法读取未定义的 highcharts highstock 的 属性 'type'

Cannot read property 'type' of undefined highcharts highstock

我在一个视图中有四个 highstock 图表 "Compare multiple series" 有时它们加载得很好,但有时随机不加载并给出错误:"Cannot read property 'type' of undefined".

有我的代码:http://pastebin.com/3He5ahzd

我不知道我做错了什么。

这是因为您错误地加载了图表的系列。

重现错误的代码。 Live example

var series = [];
series[1] = {
  data: [1,2,3]
};
Highcharts.chart('container', {
    series: series
});

错误是由length = 2的系列数组引起的,但第一个元素未定义。在您的代码中,它是由 ajax 请求的不正确使用引起的。可以在第一个 ajax 请求填充系列变量之前创建图表。您应该嵌套回调或使用其他方法来防止 ajax 请求的竞争。

        var seriesOptionsmaxload = [];
        $.getJSON('/test/statistics/5/list?parameter=maxLoad&type=wats', function (max) {
            seriesOptionsmaxload[0] = {
                name: 'Maksymalne obciążenie',
                color: '#ff0000',
                data: max
            };

          $.getJSON('/test/statistics/5/list?parameter=maxLoad&type=perKg', function (max) {
            seriesOptionsmaxload[1] = {
                name: 'W/kg',
                color: '#085fbc',
                data: max
            };
            Highcharts.stockChart('maxLoad', {
            ...
            });

          });

我已经打了第二次了,现在我知道是什么原因造成的了。

当你的图形数据有这样的系列数据时:

series: [1, 2, null, 3, 4]

series: [1, 2, undefined, 3, 4]

它会抛出这个错误,因为 highstock.src.js 显示 highstock 遍历数组中的每个项目并检查类型 属性,如下所示:

i = seriesOptions && seriesOptions.length;
while (!value && i--) {
  klass = seriesTypes[seriesOptions[i].type]; // ERROR THROWN HERE
  if (klass && klass.prototype[key]) {
    value = true;
  }
}

要防止此错误,您可以:

(1) 从数组中删除所有非对象

(2) 使用替代系列格式如下:

series: [{
  data: [1, 2, undefined, 3, 4]
}]

这将避免此错误。