Javascript charts.js在ajax请求后未更新
我对js和jquery完全是新手,但在使用Flask和Ajax请求正确显示图表的过程中,我的方法有些混乱。我遇到的问题是如何刷新图表数据。如果我创建一个新的图表,如下面的代码所示,我可以让图表显示得很好Javascript charts.js在ajax请求后未更新,javascript,jquery,ajax,charts,chart.js,Javascript,Jquery,Ajax,Charts,Chart.js,我对js和jquery完全是新手,但在使用Flask和Ajax请求正确显示图表的过程中,我的方法有些混乱。我遇到的问题是如何刷新图表数据。如果我创建一个新的图表,如下面的代码所示,我可以让图表显示得很好 $(document).ready(function() { var getdata = $.post('/charts'); var ctx = document.getElementById('myChart').getContext('2d'); var myCha
$(document).ready(function() {
var getdata = $.post('/charts');
var ctx = document.getElementById('myChart').getContext('2d');
var myChart
getdata.done(function(results){
var chartData = {
labels: results['month'],
datasets: [{
label: 'Debits',
data: results['debit'],
backgroundColor: "rgba(153,255,51,0.4)"
}, {
label: 'Credits',
data: results['credit'],
backgroundColor: "rgba(255,153,0,0.4)"
}, {
label: 'Balance',
data: results['balance'],
backgroundColor: "rgba(50,110,0,0.4)"
}]
}
myChart = new Chart(ctx, {type: 'line', data: chartData});
});
$("form :input").change(function() {
year = $(this).val();
console.log(year)
$.ajax({
type: "POST",
url: "/data",
data: {'year':year},
success: function(results){
var updatedData = {
labels : results['month'],
datasets : [{
label: 'Debits',
data: results['debit'],
backgroundColor: "rgba(153,255,51,0.4)"
}, {
label: 'Credits',
data: results['credit'],
backgroundColor: "rgba(255,153,0,0.4)"
}, {
label: 'Balance',
data: results['balance'],
backgroundColor: "rgba(50,110,0,0.4)"
}]
}
myChart= new Chart(ctx, {type: 'line', data: updatedData});
}
});
});
});
但是如果我把最后一行改成
myChart.update(updatedData)
什么也没发生,我没有收到任何错误,图表也没有更新。没有什么。奇怪的是,我知道myChart是全局的,因为我不必在Ajax请求之后再次创建它
感谢charts.js()的文档,您首先需要更改数据,然后调用update(update函数的参数不是数据,而是持续时间等): .update(持续时间,延迟) 触发图表的更新。在替换整个数据对象后,可以安全地调用此函数。这将更新所有比例、图例,然后重新渲染图表
// duration is the time for the animation of the redraw in milliseconds
// lazy is a boolean. if true, the animation can be interrupted by other animations
myLineChart.data.datasets[0].data[2] = 50; // Would update the first dataset's value of 'March' to be 50
myLineChart.update(); // Calling update now animates the position of March from 90 to 50.
因此,在你的情况下:
myChart.data = updatedData;
myChart.update();