使用Ajax正确方式刷新ChartJS(v2.6.0)中的Bar Char

ans*_*nsh 1 javascript ajax jquery charts

我正在刷新下拉列表中的条形图。我只是想知道我是否以正确的方式进行操作。每当我用代码替换现有画布时,都用新画布替换。有没有更好的方法来实现同一目标?

我的JS代码:

var chart_= function () {

    $('#canvas_id').replaceWith('<canvas id="canvas_id" style="height:280px"></canvas>');
    $.ajax({
        type: 'POST', //post method
        url: 'url', //ajaxformexample url
        dataType: "json",
        success: function (result, textStatus, jqXHR)
        {
            // GENERATE CHART DATA
            var labels = result.obj.map(function (e) {
                return e.label;
            });
            var data = result.obj.map(function (e) {
                return e.data;
            });
            new Chart($("#canvas_id"), {
                type: 'bar',
                options: options_object,
                data: {
                    labels: labels,
                    datasets: [
                        {
                            label: "",
                            backgroundColor: '#00c0ef',
                            data: data
                        }
                    ]
                }

            });

        }
    });
};
Run Code Online (Sandbox Code Playgroud)

Joh*_*end 5

绝对有更好的方法,我一直在使用Chart.js实时更新图表,而要完成所需的一种好方法是使用最初预定义的某些设置声明图表。

var chart = new Chart( canvas, {
          type: "bar",
          data: {}
          options: {}
}
Run Code Online (Sandbox Code Playgroud)

这样,每当需要更新图表时,只需访问已存在的图表即可。并将数据更新为从ajax调用中获取的数据,并使用chart.update()方法,以便可以继续使用预先存在的画布

$.ajax({
    type: 'POST', //post method
    url: 'url', //ajaxformexample url
    dataType: "json",
    success: function (result, textStatus, jqXHR)
    {
        chart.data = result;
        chart.update();
    }
});
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!