【问题标题】:Google Charts json data not loadingGoogle Charts json数据未加载
【发布时间】:2015-06-01 19:45:17
【问题描述】:

我正在使用 ASP.NET MVC 和 Google Charts 来尝试生成一个包含两条数据记录的简单折线图。我成功地从数据库中提取数据,但数据没有出现在我的图表上。数据由具有两个字段的两条记录组成:WeekOfEntry(DateTime) 和Weight(十进制)。图表出现,但数据点不存在。我猜我的数据格式不正确?

这是我的 javascript:

<script type="text/javascript">

    //Load the Visualization API library and the linechart library.
    google.load('visualization', '1.0', { 'packages': ['corechart'] });

    //Set a callback to run when the Google Visualization API is loaded.
    google.setOnLoadCallback(drawLoseATonLineChart);

    //Callback that creates and populates a data table, instantiates the line chart,
    //passes in the data, and draws it.
    function drawLoseATonLineChart() {

        var url = "@Url.Action("GetChartStatistics")";

        var jsonData = $.ajax({
            method: 'GET',
            url: url,
            dataType: 'JSON',
            async: false
        }).responseText;

        var data = new google.visualization.DataTable();
        data.addColumn('string', 'WeekOfEntry');
        data.addColumn('number', 'Weight');

        for (var i = 0; i < data.length; i++) {
            data.addRow([jsonData[i].WeekOfEntry, jsonData[i].Weight]);
        }

        var options = {
            title: 'Weight Progression',
            legend: {
                position: 'right',
                alignment: 'center'
            },
            vAxis: {
                title: 'Weight'
            },
            hAxis: {
                title: 'Week',
                slantedText: true,
                slantedTextAngle: 45

            },
            colors: ['E81A00']
        };

        var chart = new google.visualization.LineChart(document.getElementById('lose-a-ton-line-chart'));

        chart.draw(data, options);
    }
</script>

这是我的GetChartStatistics() 方法的一部分:

var lineChartData = (from a in db.Associates
            join aw in db.AssociateWeights
                on a.RegistrationId equals aw.RegistrationId
            where a.EventId == eventId &&
                  a.Username == currentuser
            select new LineChartData
            {
                Weight = aw.Weight,
                WeekOfEntry = aw.WeekOfEntry
            });

return Json(lineChartData, JsonRequestBehavior.AllowGet);

编辑:这是我的 JSON 数据在返回时的格式:

"[{"Weight":190.0,"WeekOfEntry":"\/Date(1431921600000)\/"},{"Weight":121.0,"WeekOfEntry":"\/Date(1432526400000)\/"}]"

关于为什么数据没有加载的任何想法?

【问题讨论】:

    标签: c# ajax json asp.net-mvc google-visualization


    【解决方案1】:

    你的 for 循环有问题。这是您修改后的代码。

    //Load the Visualization API library and the linechart library.
        google.load('visualization', '1.0', { 'packages': ['corechart'] });
    
        //Set a callback to run when the Google Visualization API is loaded.
        google.setOnLoadCallback(drawLoseATonLineChart);
    
    var url = "@Url.Action("GetChartStatistics")";
    
    var result = $.ajax({
        method: 'GET',
        url: url,
        dataType: 'JSON',
        async: false
    });
    var jsonData = result.responseText;
    var data = new google.visualization.DataTable();
    data.addColumn('string', 'WeekOfEntry');
    data.addColumn('number', 'Weight');
    
    $.each(JSON.parse(jsonData), function (index, obj) {
        data.addRow([obj.WeekOfEntry, obj.Weight]);
    });
    
    var options = {
        title: 'Weight Progression',
        legend: {
            position: 'right',
            alignment: 'center'
        },
        vAxis: {
            title: 'Weight'
        },
        hAxis: {
            title: 'Week',
            slantedText: true,
            slantedTextAngle: 45
    
        },
        colors: ['E81A00']
    };
    
    var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
    
    chart.draw(data, options);
    
    
    public JsonResult GetChartStatistics()
        {
            var lineChartData = new List<LineChartData>() { 
                new LineChartData() { WeekOfEntry = "sat", Weight = 1},
                new LineChartData() { WeekOfEntry = "sat1", Weight = 2},
                new LineChartData() { WeekOfEntry = "sat2", Weight = 3},
                new LineChartData() { WeekOfEntry = "sat3", Weight = 4},
            };
    
            return Json(lineChartData, JsonRequestBehavior.AllowGet);
        }
    

    【讨论】:

      【解决方案2】:

      你的例子中有一个错字,你可能想迭代jsonData对象,所以替换行:

      for (var i = 0; i < data.length; i++) {
      

      for (var i = 0; i < jsonData.length; i++)
      

      此外,由于data parameter supports date type,您可以考虑将Week 呈现为日期而不是Json 字符串。

      示例

      google.setOnLoadCallback(drawLoseATonLineChart);
      
      function drawLoseATonLineChart() {
      
          var jsonData = [
              { "Weight": 190.0, "WeekOfEntry": "\/Date(1431921600000)\/" },
              { "Weight": 121.0, "WeekOfEntry": "\/Date(1432526400000)\/" }
          ];
      
      
          var data = new google.visualization.DataTable();
          data.addColumn('date', 'WeekOfEntry');
          data.addColumn('number', 'Weight');
      
          for (var i = 0; i < jsonData.length; i++) {
              var weekOfEntry = new Date(parseInt(jsonData[i].WeekOfEntry.substr(6,13)));
              data.addRow([weekOfEntry, jsonData[i].Weight]);
          }
      
          var options = {
              title: 'Weight Progression',
              legend: {
                  position: 'right',
                  alignment: 'center'
              },
              vAxis: {
                  title: 'Weight'
              },
              hAxis: {
                  title: 'Week',
                  slantedText: true,
                  slantedTextAngle: 45
      
              },
              colors: ['E81A00']
          };
      
          var chart = new google.visualization.LineChart(document.getElementById('lose-a-ton-line-chart'));
          chart.draw(data, options);
      }
       <script type="text/javascript" src="https://www.google.com/jsapi?autoload={ 'modules':[{'name':'visualization','version':'1','packages':['corechart']}]}"></script>
      <div id="lose-a-ton-line-chart" style="width: 640px; height: 480px"></div>

      【讨论】:

        【解决方案3】:

        您是否尝试过 arrayToDataTable 函数,而不是循环遍历您的 JSON 数据?

        var dataTableData = google.visualization.arrayToDataTable(JSON.parse(jsonData));
        

        【讨论】:

        • 我试过这个,我收到一个错误“第一行不是数组。”
        猜你喜欢
        • 2018-02-14
        • 2021-04-28
        • 2014-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多