我在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);
}
}
}
答案 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元素时,会产生错误。