AJAX通话后重绘莫里斯甜甜圈

时间:2016-07-27 18:04:43

标签: javascript jquery ajax morris.js

我正在使用Morris Donut作为我正在使用的仪表板,并使用两个日期范围作为参数通过AJAX检索数据。我面临的问题是当我输入两个新的日期范围时,Donut Chart会在页面加载时在Donut上创建一个新的日期范围。我搜索了一下,可以看到有关使用setData()的信息,但我不知道如何将其包含在我的代码中。

我的代码:

$(document).ready(function () {
        var start = $('#SearchStart').val();
        var end = $('#SearchEnd').val();
        populateDonut(start, end); 
});

单击时,搜索按钮会执行以下操作:

$('#DateRange').click(function() {
        var start = $('#SearchStart').val();
        var end = $('#SearchEnd').val();
        populateDonut(start, end);
});

这是被调用的函数。

function populateDonut(start, end) {
var param = { start: start, end: end };
$.ajax({
    type: "POST",
    url: "/WebService.asmx/getDonutData",
    contentType: "application/json; charset=utf-8",
    dataType: 'json',
    async: true,
    data: JSON.stringify(param),
    success: function (result) {
        var data = eval("(" + result.d + ")");
        var pieChart = '';
        if (data.status == 0) {
            var donut = Morris.Donut({
                element: 'pieChart',
                data: [
                    { label: "Inbound", value: data.inbound },
                    { label: "Outbound", value: data.outbound },
                    { label: "Unanswered", value: data.unanswered }
                ],
                colors: ['#1ca8dd', '#33b86c', '#ebc142'],
                resize: true,
                formatter: function (x) { return x + "%" }
            });
        }   
    }
  });
}

输入新日期范围后发生的事情的屏幕截图:

enter image description here

2 个答案:

答案 0 :(得分:3)

在渲染第二张图表之前尝试调用$("#pieChart").empty();

最好在这里:

$('#DateRange').click(function() {
    var start = $('#SearchStart').val();
    var end = $('#SearchEnd').val();
    // Clear the existing chart before populating new donut
    $("#pieChart").empty();
    populateDonut(start, end);
});

答案 1 :(得分:0)

我尝试了以下代码,并且可以与我一起工作:

$("#chart-id").empty(); 

您可以在每次调用图表数据时使用它。