我有一个运行良好的Google柱形图,尽管在某些情况下,从SalesQueryN.asp返回的数据集可能为空。为避免显示错误消息,我尝试使用
if (condition) {} else {}
条款检查数据集是否为空,否则应绘制图表。
没有if时,图表将立即绘制,但是此线
chart.draw(data, google.charts.Bar.convertOptions(options));
位于else {}子句中,浏览器挂起大约30秒钟。最终它确实显示了图表的一部分,但是性能不可接受,并且没有显示正确的完整图表。
这是我用来绘制图表的Ajax代码。
google.charts.setOnLoadCallback(function() { drawsdr(cYear,cMonth,'CST')});
function drawsdr(rY, rM, rS) {
if (rY === undefined) {
rY = Date().getFullYear();
}
if (rM === undefined) {
rM = Date().getMonth();
}
if (rS === undefined) {
rS = 'CST';
}
$.ajax({
url: "api/SalesQueryN.asp?P=T&Y=" + rY + "&M=" + rM + "&S=" + rS,
dataType: "json",
async: true,
success: function (jsonData) {
var data = new google.visualization.arrayToDataTable(jsonData);
var chart = new google.charts.Bar(document.getElementById('s'+rS));
var options = {
title: rY + '-' + rM,
legend: { position: 'bottom' },
bar: { groupWidth: '80%' },
fontSize: xFS, fontName: xFo,
isStacked: false,
seriesType: 'bars',
vAxis: { format: '#,###' },
hAxis: { textStyle: { fontSize: xFS } }
};
if (data.getColumnLabel(0) == "empty") {
document.getElementById("sCST").innerHTML = "<p>There is no data to display for " + rY + "-" + rM + "</p>";
} else {
chart.draw(data, google.charts.Bar.convertOptions(options));
}
},
error: function (response) {
alert(Object.keys(response));
//alert(response.statusText);
alert(response.responseText);
}
});
}
我不太确定为什么if子句会如此严重地影响性能。
现在我的问题是如何在不降低图表绘制速度的情况下对数据表进行检查?