javascript - 如何仅更新 Chart.JS 中的新数据?

标签 javascript jquery ajax chart.js

实际上,在我的网站中按下按钮后,我调用了一个引导模式,其中有一个 Chart.JS,该图表的数据通过以下方式从 Ajax 调用加载

function loadReports(data) {
    $.ajax({
        type: "POST",
        url: "Default.aspx/getReports",
        contentType: "application/json; charset=utf-8",
        data: JSON.stringify({ data: data }),
        dataType: "json",
        success: function (r) {
            data = r.d;
            if (data != '[]') {
                data = jQuery.parseJSON(data);
                var dataObject = {
                    labels: data.map(ora => ora.ORARIO),
                    datasets: [{
                        label: 'Coperti',
                        backgroundColor: gradient,
                        hoverBackgroundColor: gradient,
                        data: data.map(cop => cop.COPERTI)
                    }]          
                };
                chart.data = dataObject;
                chart.update(0);
            } else {
                var dataObject = {
                    labels: [],
                    datasets: []
                }
                chart.data = dataObject;
                chart.update();
            }

        },
        error: function (error) {
            alert(error.responseText);
        }
    });

}

现在我想“实时更新”该图表,但问题显然是通过对该函数进行ajax poll所有图表数据都会更新

虽然我会仅更新新数据,但如果我将图表构建为标签[“15:00”,“16:00”] datasets [5,8] 当新数据添加到数据库时 17:00/9 我将仅添加新值或另一个示例,如果数据为 15: 00 已更改为 10 我只想更新标签 15:00 中设置的值。

最佳答案

是的,您可以更新这两件事

  1. 带有新数据点的新标签
  2. 更新现有数据点

    document.getElementById('addData').addEventListener('click', function() {
            if (config.data.datasets.length > 0) {
                var month = MONTHS[config.data.labels.length % MONTHS.length];
                config.data.labels.push(month);
    
                config.data.datasets.forEach(function(dataset) {
                    dataset.data.push(randomScalingFactor());
                });
    
                window.myLine.update();
            }
        });
                document.getElementById('updateOnlyPoint').addEventListener('click', function() {
            if (config.data.datasets.length > 0) {
                var month = config.data.labels.indexOf("March");//change point
                var olddata=config.data.datasets[0].data
                 olddata[month]=randomScalingFactor(); //new data
                window.myLine.update();
            }
        });
    

这里正在工作example

关于javascript - 如何仅更新 Chart.JS 中的新数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58317157/

相关文章:

javascript - 获取文本字段或选择框的值或文本

jquery - 无法使用 jquery 获取 Textarea 值

javascript - 如何使用 JQuery/Javascript 检查选择框是否为空

javascript - 无法按顺序触发两个 jQuery ajax 调用

java - 创建 web 应用程序的最佳方法,该应用程序通过外部客户端调用自己的其余服务来动态更新 UI

javascript - 如何从 Angularjs 的本地存储数组中删除特定元素?

javascript - 使用 jQuery Tablesorter 自定义字母数字排序

javascript - 我如何使用 Hbase 中的数据通过 d3.js 进行可视化

jquery - JSON 中位置 2 处出现意外标记 < jquery 自动完成

javascript - 如何用另一个 Div 替换一个 Div 但只替换一次