Highcharts检查系列是否为空

时间:2013-09-18 16:32:20

标签: jquery highcharts

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

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

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

我不检查图表系列是否正确数据?如果系列长度大于0则不是if条件运行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);
        }
    }
}

2 个答案:

答案 0 :(得分:2)

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

图表是undefined,你在哪里存储它?确保它引用你的Highcharts Chart; 或者,如果你知道在某些情况下它是undefined,那么也要检查“truthy-ness”。

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

<强>更新

HighSoft为此设置了自定义module

答案 1 :(得分: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()destory()并且Highcharts尝试删除不存在的SVG元素时,会产生错误。