Как обновить несколько серий в Highcharts одновременно

Я использую Highcharts для построения графиков нескольких серий на одном графике. Данные ряда считываются из файла, содержащего данные в формате JSON. Файл будет обновляться новыми данными каждые несколько секунд, и у меня есть функция, чтобы перечитать файл. Вот данные в файле:

[{"name": "series1", "data": [[1,109],[2,313],[3,192]]},{"name": "series2", "data": [[1,111],[2,112],[3,777]]}]

У меня есть код:

//Read JSON data from a file
$(function () {

    function getSeriesData(file) {
        var data = null;
        $.ajax({
        async: false,
            cache: false,
        url: file,
            method: 'GET',
            dataType: 'json',
            success: function(datasets){
                data = datasets;
            },
            error: function(error,text,http){
                alert("Error retrieving " + url + ".");
            }
        });  

        return data;
    }

    var graphData = getSeriesData("seriesData.json");

    var graphOptions = {
            chart: {
             type: 'line',
             renderTo: "container",
         },
         series: graphData
    };


    var graph = new Highcharts.Chart(graphOptions);

    var updateInterval = 1000 * 5;  // 5 seconds

    function update() {
        //Need to refresh series data here.
                    //Something like:
            graph.series = getSeriesData("series.json");
            graph.redraw();
            setTimeout(update, updateInterval);
    }

    update();});

Глядя на документацию, я не вижу способа установить все данные серии одновременно, используя мою функцию getSeriesData для перечитывания файла. У большинства примеров здесь и в других местах есть способы установить данные для отдельных серий, просматривая массив series[]. Но это не то, что я ищу. Возможно, мне придется переделать код, чтобы сделать это таким образом, но я решил сначала проверить здесь в надежде, что есть более простой способ! Заранее спасибо.

1 ответ

Я не вижу способа сделать все серии одним вызовом. Я вижу два варианта.

Если число серий фиксировано, вы можете перебирать их, вызывая series.setData с параметром redraw, установленным в false, и затем вызывать redraw().

Если число рядов может измениться, вам придется выполнить итерацию по chart.series с вызовом remove, а затем выполнить итерацию по массиву рядов с вызовом chart.addSeries.

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