Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript charts.js在ajax请求后未更新_Javascript_Jquery_Ajax_Charts_Chart.js - Fatal编程技术网

Javascript charts.js在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

我对js和jquery完全是新手,但在使用Flask和Ajax请求正确显示图表的过程中,我的方法有些混乱。我遇到的问题是如何刷新图表数据。如果我创建一个新的图表,如下面的代码所示,我可以让图表显示得很好

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