0

我在 AJAX 成功事件中有此代码,此 AJAX 在更改和更新日期范围后触发,如果没有要返回的数据,我返回一个空 == true 的 json 数组。

如果在 AJAX 事件触发之前图表中有数据,则嵌套的 if 条件将触发并删除每个数据系列。

问题是如果图表最初加载时没有数据,然后用户更改日期,AJAX 触发,如果条件仍在触发,则查看没有数据,我得到错误Uncaught TypeError: Cannot read property 'series' of undefined

我不是在检查图表系列是否有正确的数据吗?if 条件不是说如果系列长度大于 0 运行 while 循环吗?当系列中没有数据时,如何跳过 while 循环?

var chart = $('#chart').highcharts();
if (data.empty == 'true') {
    alert('empty');

    $('#chart').html( "<div class='empty-chart'>No data available for selected date range</div>" );

    if (chart.series.length > 0) {
        while (chart.series.length > 0) {
            chart.series[0].remove(true);
        }
    }
}
4

2 回答 2

2
if (chart.series.length > 0) {
----^^^^^--------------------

图表是undefined,你在哪里存储它?确保它参考您的 Highcharts 图表;或者,如果您知道undefined在某些情况下是这样,也只需检查“真实性”。

    if (chart && chart.series && chart.series.length > 0) {

更新

HighSoft 为此提供了一个自定义模块

于 2013-09-18T16:39:08.523 回答
1

更改函数中的顺序,并使用destroy()而不是逐个删除系列:

var chart = $('#chart').highcharts();
if (data.empty == 'true') {
    alert('empty');

    chart.destroy(); //why remove all series, while you can remove chart to free some space and resources

    $('#chart').html( "<div class='empty-chart'>No data available for selected date range</div>" ); //now show some information about chart
}

否则,您首先将自定义文本添加到图表容器,删除所有 SVG 元素。然后,当您调用remove()ordestory()并且 Highcharts 尝试删除不存在的 SVG 元素时......这会产生错误。

于 2013-09-19T12:15:29.707 回答