Загрузка данных Highcharts через ajax удаляет Datalabels

У меня есть гистограмма HighCharts, которая заполняет данные от вызова ajax следующим образом.

var updateChart = function() {
            $.ajax({
                url: "/theurl/theid",
                type: "Get",
                success: function(data) {
                    chart.xAxis[0].setCategories(data.SomeText);
                    chart.series[0].setData(data.SomeData, true);
                    chart.series[1].setData(data.OtherData, true);
                }
            });
        };

График построен так

var chart;
        $(document).ready(function() {
            chart = new Highcharts.Chart(
                {
                    chart: {
                        type: 'bar',
                        renderTo: 'container',
                        height: 750
                    }, ... (more options removed for brevity),                
                    plotOptions: {
                        series: {
                            dataLabels: {
                                enabled: true,
                                format: '{y} %',
                                style: {
                                    fontWeight: 'bold',
                                    color: '#3b3b3b',
                                    fontSize: '125%'
                                },
                                useHTML: true
                            }
                        },
                        bar: {
                            dataLabels: {
                                enabled: true
                            },
                        }
                    },
                  ... (more options removed for brevity)
            );
        });

Идея состоит в том, что данные в диаграмме будут обновляться динамически каждые 10 секунд, и перезагрузка всей страницы не вариант.

Данные загружаются и диаграмма отображается только при запуске updateChart() из консоли. В первый раз, когда я запускаю updateChart(), все выглядит нормально, однако во второй раз, когда я выполняю его (без перезагрузки страницы), все появляется, кроме dataLabels, который должен показывать процент (100%, 55% и т. Д.)

Если я удаляю опцию useHTML = true из plotOptions.Series.DataLabels, процент снова отображается, но в нем появляются другие проблемы со стилем, которые я использовал для использования опции useHtml.

Есть ли способ установить для useHTML значение true и не допустить исчезновения dataLabels при обновлении?

1 ответ

Я попробовал ваш код, и он отлично работает, см.: http://jsfiddle.net/2Gbja/2/

$("#b").click(function() {
    var chart = $('#container').highcharts();

    chart.xAxis[0].setCategories([Math.random(), Math.random()], false);
    chart.series[0].setData([Math.random(), Math.random()], false);
    chart.series[1].setData([Math.random(), Math.random()], true); //redraw chart once
});

$('#container').highcharts({

    chart: {
        type: 'column'
    },

    series: [{
        data: [10, 20]
    },{
        data: [10, 20]
    }]
});

Примечание: перерисовать диаграмму только один раз, поэтому есть false для перерисовки и только последний true,

Другие вопросы по тегам