我需要绘制一个12个月的图表。我从其余的api得到的每个月的数据。 所以这就是我做的事情
$.getJSON(link, function(data){
// store data in a variable
}
x 12 times to get 12 variable
window.onload = function(){
// draw chart using CanvasJS, using 12 variable above
}
但我得到的是某些点(某个月)其余的api需要很长时间来获取数据 - >图表将以未定义的值绘制 - >图表中有几个月没有意义。
有人建议如何解决这个问题吗?
答案 0 :(得分:1)
看起来您正在进行12次不同的API调用,并且您希望在所有内容完成后组装画布。
您需要进行单独调用并将其存储在名为promises
的数组中。
var promise1 = $.getJSON(link);
//... x 12
var promises = [promise1, promise2, promise3, //..etc];
然后您将使用$.when
等待所有人解决。
$.when.apply($, promises).then(function(allMyData) {
//make my canvas here
}, function(e) {
console.log("My ajax failed");
});
现在,您通常可以在AJAX回调中检索的所有数据都可以allMyData
访问,这是每个响应的数组。
答案 1 :(得分:0)
设置两个变量来记录数据编号的变化,并检查存储的数据是否与您需要的数据相匹配,如果是,则绘制图表。
var totalDataNumber = 12;
var storedDataNumber = 0;
$.getJSON(link, function(data){
// store data in a variable
storedDataNumber++;
// check if all data are ready
if (storedDataNumber === totalDataNumber) {
draw();
}
}
// x 12 times to get 12 variable
function draw() {
// draw chart using CanvasJS, using 12 variable above
}