否则方法无法执行?

时间:2017-10-30 21:43:54

标签: javascript jquery charts google-visualization sharepoint-2013

我正在尝试根据项目状态中的实例计数生成条形图。 “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数据的实际列表时,我可以找到它。这可能是导入后表格中没有正确翻译的问题吗?

2 个答案:

答案 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"