2016-09-22 63 views
2

新手,谷歌图表JSON数据,我想创建一个谷歌图,控制器返回像谷歌图表所需ASP.Net MVC - 为谷歌图表

{"data":[["In Progress","10"],["Completed","20"],["Deleted","5"],["Overdue","8"]]} 

但数据JSON数据应该像

[["In Progress",10],["Completed",20],["Deleted","5"],["Overdue",8]] 

我有以下JS功能:

$(document).ready(function() { 
     $.ajax({ 
      url: '@Url.Action("TaskStatus", "Graph")', 
      data: "", 
      dataType: "json", 
      type: "POST", 
      contentType: "application/json; chartset=utf-8", 
      success: function (data) {     
       var jsonData = JSON.stringify(data); 

       var dt = new google.visualization.DataTable(); 
       dt.addColumn('string', 'Tasks'); 
       dt.addColumn('number', 'Count'); 

       $.each(arrJson, function (i, obj) { 
        $.each(obj, function (i, o) { 
         console.log(o[1]);        
         dt.addRow(o[0],parseInt(o[1])); // here I get error of datatype for "Count" column 
        })            
       }) 
       chartData = dt; 
      }, 
      error: function (err) { 
       alert(err); 
       console.log(err); 
      } 
     }).done(function() { 
      drawChart(); 
     }) 
    }) 

function drawChart() 
{   
var options = { 
       width: '500px', 
       title: "Task Status", 
       pointSize: 20, 
       chartArea:{width:"100%",height:"100px"} 
      }; 
     var pieChart = new google.visualization.PieChart(document.getElementById('chart_div')); 
     pieChart.draw(chartData, options); 
} 

控制器返回

List<object> temp = new List<object>(); 
      temp.Add(new[] { "In Progress", "10" }); 
      temp.Add(new[] { "Completed", "20" }); 
      temp.Add(new[] { "Deleted", "5" }); 
      temp.Add(new[] { "Overdue", "8" }); 

      return Json(new { data = temp }); 

请指教如何解决此问题?提前感谢!

回答

0

在控制器

试试这个

return Json(temp); 
+0

不工作JSON变得像{ “数据”:[[ “进行中”, “10”]}。同样的问题 – Sami

2

你不应该使用JSON.stringify功能在你的AJAX成功回调,因为这将改变你从服务器钻进一个字符串对象。你可以试试这个:

success: function (result) { 
    var dt = new google.visualization.DataTable(); 
    dt.addColumn('string', 'Tasks'); 
    dt.addColumn('number', 'Count'); 

    // Taking the "data" property as your controller returns it that way 
    var data = result.data; 

    $.each(data, function (i, obj) { 
     var label = obj[0]; 
     var value = parseInt(obj[1]); 
     dt.addRow([label, value]); 
    }); 

    chartData = dt; 
}, 
+0

fyi:在这一行末尾的拼写错误 - >'dt.addRow(label,value);列' – WhiteHat

+0

dt.addRow(label,value);更改为dt.addRow([label,value]); – Sami

+0

是的,我不熟悉'addRow'函数期望的参数。它看起来像它必须是一个数组。 –