0

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);
        }
    }
}
4

2 に答える 2

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

チャートは ですがundefined、どこに保管していますか? ハイチャート チャートを参照していることを確認してください。または、特定のケースであることがわかっているundefined場合は、「真実性」も確認してください。

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

アップデート

HighSoft には、このためのカスタムモジュールがあります。

于 2013-09-18T16:39:08.523 に答える
1

関数の順序を変更し、destroy()シリーズを 1 つずつ削除する代わりに使用します。

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()orを呼び出すdestory()と、Highcharts が存在しない SVG 要素を削除しようとすると、エラーが発生します。

于 2013-09-19T12:15:29.707 に答える