Javascript Highcharts未在设置间隔上绘制点

Javascript Highcharts未在设置间隔上绘制点,javascript,jquery,json,highcharts,Javascript,Jquery,Json,Highcharts,我在后端每隔30秒将数据放在api上。在前端,我使用highcharts可视化数据,并使用setInterval设置每隔30秒检索一次新数据。我的问题是,在该设置间隔上,线图消失或不绘制到下一个新点。有人知道这是为什么吗 小提琴: 代码: chart1 = { yAxisMin: 40, yAxisMax: 100 }; // empty objects for our data and to create chart seriesData = []; BPM = []; tim

我在后端每隔30秒将数据放在api上。在前端,我使用highcharts可视化数据,并使用setInterval设置每隔30秒检索一次新数据。我的问题是,在该设置间隔上,线图消失或不绘制到下一个新点。有人知道这是为什么吗

小提琴:

代码:

chart1 = {
    yAxisMin: 40,
    yAxisMax: 100
};
// empty objects for our data and to create chart
seriesData = [];
BPM = [];
time1 = [];

// console.log(chart1.data.series);

$(function () {
    $(document).ready(function () {
        Highcharts.setOptions({
            global: {
                useUTC: false
            }
        });



        var url = 'http://msbandhealth.azurewebsites.net/odata/PulsesAPI/';
        $.ajax({
            url: url,
            dataType: 'json',
            context: seriesData,
            success: function (data) {



                // structure our data 
                for (var i = 0; i < data.value.length; i++) {
                    bpm = data.value[i].BPM;
                    time = data.value[i].Time;
                    BPM.push({
                        x: moment(time),
                        y: bpm
                    });
                    // console.log(BPM);
                    time1.push(time);
                }
                console.log((new Date).getTime());
                console.log(moment(time, "DD.MM.YYYY hh:mm:ss"));
                console.log(BPM);
                console.log(BPM[BPM.length - 1]);
                // console.log(seriesData);

                // set our data series and create new chart
                chart1.data.series[0].data = BPM;

                chart = new Highcharts.Chart(chart1.data);
                $('#container').css({
                    height: '400px'
                });


                // console.log(sortedBPM);


                // console.log(time1);

            }

        });




        // give highcharts something to render to
        var container = document.getElementById("container");

        chart1.data = {

            chart: {
                renderTo: container,
                type: 'spline',
                animation: Highcharts.svg, // don't animate in old IE
                marginRight: 10,
                events: {
                    load: function () {
                        setInterval(function () {

                            // find last data points
                            var test = BPM[BPM.length - 1];
                            var x = (new Date).getTime(),
                                y = test.y;
                            console.log(x);

                            shift = chart.series[0].data.length < 30;
                            chart.series[0].addPoint([x, y], true, true);




                        },
                        30000);
                    }
                }

            },
            title: {
                text: 'Microsoft Band: Real Time Pulse Analysis'
            },
            xAxis: {
                type: 'datetime',
                tickPixelInterval: 150,
                dateTimeLabelFormats: {


                },
            },
            yAxis: {
                min: chart1.yAxisMin,
                max: chart1.yAxisMax,
                title: {
                    text: 'Heart Rate'
                },
                plotLines: [{
                    value: 0,
                    width: 1,
                    color: '#808080'
                }]
            },
            tooltip: {
                formatter: function () {
                    return '<b>' + this.series.name + '</b><br/>' + Highcharts.dateFormat('%H:%M:%S', this.x) + '<br/>' + Highcharts.numberFormat(this.y, 2);
                }
            },
            legend: {
                enabled: false
            },
            exporting: {
                enabled: false
            },
            series: [{
                name: 'Beats Per Minute',
                data: []
            }]


        };

    });
});
你的测试。y是问题所在。它在一个间隔后返回undefined。不知何故,BPM的结构正在发生变化——将每个对象从{x,y}更改为[0,1]——因此我使用:

 y = (test.y !== undefined)? test.y : test[1];

获取以前的结构或新结构。我还将间隔设置为3秒,以便您更容易看到差异。以下是.

我也尝试过将间隔时间改为30秒以上,但结果都是一样的。他们的api上到处都是,特别是addPoint部分。不过谢谢。hmmmm创建一个新函数,在setInterval上暂停/停止动画,直到准备好下一步。如果test.y=0,该怎么办?我认为您应该检查test.y是否未定义。@RaeenHashemi您的回答让我意识到了一些事情……我非常确定BPM在加载时只在ajax调用中更新一次。在这之后,它没有更新,这可能就是为什么它返回时没有定义,或者在我引用区域中的最后一个索引时具有相同的点。你的演示看起来很棒。问题是,如果发送数据的设备处于打开状态,api只会每30秒更新一次。此时设备未打开,演示仍在更新。你听懂了吗?所以我想知道是否应该在set interval函数中再调用一个ajax?这会杀死浏览器吗?谢谢是的,自从ajax调用以来BPM只更新了一次,但是addPoint函数在每个时间间隔内都会更新BPM,我不知道是什么原因。关于30秒的部分,我实际上没有听进去,但是每30秒调用一次ajax也没那么糟糕。