当前位置: 首页 > 知识库问答 >
问题:

如何只更新Chart.js中的新数据?

卢嘉誉
2023-03-14

实际上,在按下我网站中的一个按钮后,我调用了一个引导模式,其中有一个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轮询来更新所有图表数据

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

共有1个答案

糜征
2023-03-14

是的,你可以更新这两个东西

>

  • 使用新数据点新建标签
  • 更新现有数据点

    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();
            }
        });
    

    下面是工作示例

  •  类似资料:
    • 问题内容: 如何只更新数据库上的一条记录? 桌子: 更新查询: 但是我每次只需要更新一行 问题答案: 您可以使用ROWCOUNT 或者您可以使用更新顶部

    • 我尝试只更新chart.js,而不需要刷新浏览器,也不需要重新加载所有行的动画。我尝试使用简单的命令chart.update(),但它不断刷新浏览器和动画。我想用尽可能简单的方式来做这件事。我的数据来自数据库。 这是我的图表: 这是我试图更新图表的内容:

    • 我正在使用chart.js在html页面中创建多个图表,并且在Windows加载之后,图表将以每秒的速度动态更新,并使用新的数据值。我正在使用chart.js update()函数处理更新。所有创建的图表都存储在全局数组中,然后获取这些图表进行更新。 当我第一次打开html页面时,每秒都会更新图形(显示实时测量数据),但当我移动到webapp中的另一个子页面,然后返回到图形应该所在的页面时,所有画

    • 我曾尝试使用“ChilDeventListener”,但当我第一次初始化侦听器时,它会从数据库中获取最后一行。如果它没有更新,则不应获取它。我只想要对象时,它是更新或新添加。我做到了, 提前谢谢你。

    • 我设置了一个chart.js图表,它使用mysql数据库中的数据。我已经建立了一个rest服务来提供tha数据,具有定义分组IE的能力。数据每隔5分钟测量一次,但我将其分组为3小时段,使用我的SQL语句 我希望能够通过定义一个新的粒度来改变数据的粒度。 我创建了一个更新函数来将请求发送到后端,并更新图表。 图表已更新,但默认值有61个条目(目前),最细粒度的数据有180个条目。所发生的情况是,数据

    • 我正在创建一个SpringBoot/Angular 8应用程序,并在尝试更新解耦的前端/后端对象时遇到一些问题。当我发送包含角模型的json post请求时,'d或其他缺失的值将被更新为null,而不是被忽略。 这个堆栈溢出问题与此密切相关,推荐的解决方案确实有效,但它打断/绕过了一系列Jackson/Hibernate注释(例如和),所以,如果可能的话,我想寻找其他的解决方案:当使用json解析