У меня есть столбчатая диаграмма 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 так сильно влияет на производительность.
Теперь у меня вопрос: как я могу проверить таблицу данных, не замедляя рисование диаграммы?