Javascript 使用AJAX调用检索数据的ChartJS是';t渲染可视化

Javascript 使用AJAX调用检索数据的ChartJS是';t渲染可视化,javascript,jquery,ajax,chart.js,Javascript,Jquery,Ajax,Chart.js,使用ChartJS从静态数据集创建可视化没有任何问题,但是当我使用通过AJAX调用检索的数据时,可视化无法呈现。没有抛出错误,并且我的数据结构相同 以下是我的javascript: var ctx = $('#myChart'); function drawDonut(){ $.ajax({ method: "GET", url: "url", contentType: "application/json", success: function(data)

使用ChartJS从静态数据集创建可视化没有任何问题,但是当我使用通过AJAX调用检索的数据时,可视化无法呈现。没有抛出错误,并且我的数据结构相同

以下是我的javascript:

var ctx = $('#myChart');

function drawDonut(){

  $.ajax({
    method: "GET",
    url: "url",
    contentType: "application/json",
    success: function(data){

      var myDoughnutChart = new Chart (ctx, {
        type: 'doughnut',
        data: data,
        animation:{
          animateScale:true
        }
      });
    }
  });
}

$(document).ready(function() {
    drawDonut();
});
以下是AJAX数据的构造方式:

var data = {
   labels: ['red', 'blue', 'green', 'orange', 'yellow'],
   datasets: {
      data: [12, 15, 17, 19, 202],
      }
}
我已经尝试将var ctx包含在'drawDonut'函数内部和外部,如图所示。我将'drawDonut'存储为一个变量,并单独调用它。两者都不起作用。有什么想法吗

编辑:


忘记提到ChartJS中的iframe被附加到DOM中,而不是实际的图表。

确保返回的数据是JSON对象,而不仅仅是JSON字符串。换句话说,尝试
data=JSON.parse(data)
,这可能会解决问题。

data.dataset
应该是一个对象数组,您只有一个对象

如果我从一个通常在ajax成功函数中使用此手动创建的结构的数组中删除数组
[]
,我会得到相同的结果(没有绘制图形):

data: {
    labels: ajaxData.Labels,
    datasets: [{
        label: ajaxData.Sets[0].Label,
        data: ajaxData.Sets[0].Data,
        backgroundColor: colourScheme.seventyPercent,
        hoverBackgroundColor: colourScheme.opaque,
        borderColor: colourScheme.white,
        borderWidth: 2
    }]
}

不,这是抛出一个异常。我们正在处理一个有效的对象。谢谢你!你确定你的ajax调用是同步的吗?我没有,但我已经尝试用$(document)调用了这两个调用。准备好了,点击事件发布页面加载,看看这是否是问题所在-不是。