使用Jquery动态更改ChartJS折线图

atmip9wb  于 2022-11-03  发布在  jQuery
关注(0)|答案(1)|浏览(238)

我从服务器收到了3个数组作为响应,我尝试使用ChartJS创建一个折线图。当我输入静态值时,折线图结果很好,但当从服务器传递新数据时,它不能反映变化。

var months = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]
var rdone_array = []
var rdtwo_array = []
var rdthree_array = []

// for graph data backend calls
function get_graphData(year, timePeriod, direction){
    let year_value = year;
    let timePeriod_value = timePeriod;
    let direction_value = direction;
    $.ajax({
        method:"get",
        url:"/los_graph",
        data:{
            db_year:year_value,
            db_timePeriod:timePeriod_value,
            db_direction_value:direction_value,
        },
        success:function(res){
            rdone_array = JSON.parse("[" + res['rdone'] + "]")
            rdtwo_array = JSON.parse("[" + res['rdtwo'] + "]")
            rdthree_array = JSON.parse("[" + res['rdthree'] + "]")
            // updating chart
            myChart.update();
        }
});
    // console.log("second step")
}

// frontend chart code
var data = {
    labels: months,
    datasets: [
                    {
                        label: 'Road 1',
                        borderColor: '#d62828',
                        data: rdtwo_array,
                        borderWidth: 2,
                    },
                    {
                        label: 'Road 2',
                        borderColor: '#f77f00',
                        data: rdone_array,
                        borderWidth: 2,
                    },
                    {
                        label: 'Road 3',
                        borderColor: '#fcbf49',
                        data: rdthree_array,
                        borderWidth: 2,
                    }
                ]
  };

var config = {
    type: 'line',
    data: data,
    options: {
        responsive: true
    },
    scales: {
                y: {
                    title: {
                      display: true,
                      text: 'Value'
                    },
                    ticks: {
                        min: 0,
                        max: 150,
                        color: "white",
                      // forces step size to be 50 units
                        stepSize: 10
                    }
                  }
            }
};

var myChart = new Chart(
    document.getElementById('myChart'),
    config,
);

由服务器响应填充后的数组如下所示:

当我的应用程序启动时,图表如下所示(因为数组为空):

我已经尝试在 AJAX 请求的成功部分执行“myChart.update()”,但结果证明并不成功。
输出应该如下所示,并且当服务器以不同的值响应时,输出会动态变化。

643ylb08

643ylb081#

定义一个函数,并在 AJAX 请求的“success”部分之后调用它,已经为我解决了这个问题。

myChart.update();

我现在调用这个函数。

function updateLineChart(){
    myChart.data.datasets[0].data = rdone_array;
    myChart.data.datasets[1].data = rdtwo_array;
    myChart.data.datasets[2].data = rdthree_array;
    myChart.update();
}

相关问题