我的图表有多个序列,当我尝试添加一个新点并在该序列的addpoint函数中启用true转换时,似乎减少了很多点。我的requestData函数运行一个ajax查询,该查询命中我的api并带回数据。初始加载可以很好地加载数据,但是在将第一个点添加到序列中之后,它似乎从某些序列中减去了太多点。

这是初始加载的样子

https://gyazo.com/51a2afc465f8fbb625e384e75d52b865

这是一两个请求后的样子:

https://gyazo.com/0b523e4675c681b7495a38660b4de72c

https://gyazo.com/5cf7e9498ab3b34f3eaac1cf50a0bdc5

这是我请求数据的代码:

function requestData(chart1, start, devID, attrib) {
$.ajax({
    url: 'api/MetricsAPI/',
    data: {
        deviceID: devID,
        attribute: attrib,
        startDate: start
    },
    success: function (dataset) {
        var chartSeries = chart1.series;
        for (var index = 0; index < dataset.length; index++) {
            for (var i = 0; i < chartSeries.length; i++) {
                if (chartSeries[i].name == dataset[index].attribute) {
                    var shift = chartSeries[i].data.length > 12;
                    chartSeries[i].addPoint([parseInt(dataset[index].epochTime), dataset[index].value], true, shift);
                    console.log('date: ' + dataset[index].epochTime + ', ' + 'value: ' + dataset[index].value);
                }
            }
        }
        chart1.redraw();
        //call it again after one minute
        setTimeout(requestData, 30000, chart1, dataset[dataset.length - 1].epochTime, devID, attrib);
    },
    failure: function (xhr, error) {
        console.log(xhr);
        console.log(error);
    },
    cache: false
});
}

最佳答案

当前代码可能存在两个问题:


redraw参数设置为false,在这里:chartSeries[i].addPoint([parseInt(dataset[index].epochTime), dataset[index].value], true, shift);
设置series.id并避免比较chartSeries[i].name == dataset[index].attribute。要获得正确的序列,请使用chart.get(id)

09-25 19:27