否则如果方法执行失败?

Else if method fails to execute?

我正在尝试根据项目状态中的实例计数生成条形图。 "if..." 语句工作得很好,计算所有包含字符串 "Complete" 的元素,在控制台上输出并绘制它。但是,"else if..." returns 控制台上没有任何内容,也没有任何图形。我对问题可能是什么感到震惊。有什么见解吗?

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 数据的实际列表时,我可以找到它。这可能是 table 在导入后未在 XML 中正确翻译的问题吗?

如果值为 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;
    }
  }
}

正如我所怀疑的那样,问题出在 AJAX 调用上。上面的代码是正确的;我只需要将 "?$top=1000" 添加到 link 因为服务器端分页存在限制。

var uri="https://company.com/sites/ITApp/_api/Web/Lists/getByTitle('Global%20Projects')/items?$top=1000"