我正在尝试根据项目状态中的实例计数生成条形图。 “if ...”语句可以很好地工作,计算包含字符串“Complete”的所有元素,在控制台上输出并绘制图形。但是,“else if if”在控制台上没有返回任何内容并且没有任何图形。我对这个问题可能是什么感到茫然。有什么见解吗?
google.charts.load('current', {
'packages': ['bar']
});
google.charts.setOnLoadCallback(drawChart);
function drawChart() {
var complete = 0;
var deferred = 0;
var onhold = 0;
var uri = "https://company.com/sites/ITApp/_api/Web/Lists/getByTitle('Global%20Projects')/items";
$.ajax({
url: uri,
type: "GET",
async: false,
data: {},
cache: true,
headers: {
"ACCEPT": "application/json;odata=verbose"
},
success: function(data) {
var dataResults = data.d.results;
for (i = 1; i < dataResults.length; i++) {
if (dataResults[i].Project_x0020_Status == "Completed") {
complete = complete + 1;
} else if (dataResults[i].Project_x0020_Status == "Deferred") {
console.log(deferred);
deferred = deferred + 1;
} else if (dataResults[i].Project_x0020_Status == "On-Hold") {
onhold = onhold + 1;
} else {}
}
}
});
var data = google.visualization.arrayToDataTable([
['Category', 'Complete', 'Deferred', 'On-Hold'],
['Project Status', complete, deferred, onhold],
var options = {
chart: {
title: 'Company Performance',
subtitle: 'Sales, Expenses, and Profit: 2014-2017',
}
};
var chart = new google.charts.Bar(document.getElementById('columnchart_material'));
chart.draw(data, google.charts.Bar.convertOptions(options));
}
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<div id="columnchart_material" style="width: 800px; height: 500px;"></div>
更新:我认为此时这是一个SharePoint问题。当我去我的uri并在那里的XML文件中搜索“Deferred”和“On-Hold”时,我找不到它们中的任何一个。但是,当我转到包含SharePoint数据的实际列表时,我可以找到它。这可能是导入后表格中没有正确翻译的问题吗?
答案 0 :(得分:0)
如果值为null
,则可能不会将其作为属性包含在行
在检查值
之前检查以确保它存在您还可以使用switch
语句检查值...
var dataResults = data.d.results;
for (i = 0; i < dataResults.length; i++) {
if (dataResults[i].hasOwnProperty('Project_x0020_Status')) {
switch (dataResults[i].Project_x0020_Status) {
case "Completed":
complete = complete + 1;
break;
case "Deferred":
deferred = deferred + 1;
break;
case "On-Hold":
onhold = onhold + 1;
break;
}
}
}
答案 1 :(得分:0)
问题出在我所怀疑的AJAX调用上。上面的代码是正确的;我只需要在链接中添加“?$ top = 1000”,因为服务器端分页存在限制。
var uri="https://company.com/sites/ITApp/_api/Web/Lists/getByTitle('Global%20Projects')/items?$top=1000"