在调试时。当执行离开控制器我调试并且变量包含:
?sArray {string [17,2]} [0,0]:“Arecleoch” [0,1]:“21” [1,0]:“巴恩斯莫尔” [1,1]:“3”
等等......
然后在javascript中收到:
?SDATA {...} [0]:“Arecleoch” [1]:“21” [2]:“Barnesmore” [3]:“3” [4]:“Beinn An Tuirc” [5]:“1” [6]:“Beinn An Tuirc Phase 2”
等
所以饼图显示为一个实心的圆形
困惑,有什么想法?
以下控制器代码:
public JsonResult GetChartData_IncidentsBySite()
{
var allSites = _securityRepository.FindAllSites();
var qry = from s in _db.Sites
join i in _db.Incidents on s.SiteId equals i.SiteId
group s by s.SiteDescription
into grp
select new
{
Site = grp.Key,
Count = grp.Count()
};
string[,] sArray = new string[qry.Count(),2];
int y = 0;
foreach (var row in qry.OrderBy(x => x.Site))
{
if ((row.Count > 0) && (row.Site != null))
{
sArray[y, 0] = row.Site.ToString();
sArray[y, 1] = row.Count.ToString();
y++;
}
}
return Json(sArray , JsonRequestBehavior.AllowGet);
}
以下是javascript代码:
$.getJSON(url, null, function(sdata) {
debugger;
chart = new Highcharts.Chart({
chart: {
renderTo: 'container',
plotBackgroundColor: null,
plotBorderWidth: null,
plotShadow: false
},
title: {
text: 'Number of Environmental Incidents by Site'
},
tooltip: {
formatter: function() {
return '<b>' + this.point.name + '</b>: ' + this.y + ' %';
}
},
plotOptions: {
pie: {
allowPointSelect: true,
cursor: 'pointer',
dataLabels: {
enabled: false
},
showInLegend: true
}
},
series: [{
type: 'pie',
name: 'Incidents by Site',
data: sdata
}]
});
});
});
答案 0 :(得分:0)
在可行的版本中,data是String的数组 Array ;
data: [["Arecleoch",21], ...
(请注意,在第一个括号之前没有oppening引号。)
在不起作用的版本中,它是表示Array的String。 我怀疑图表API只期望一个数组(在这种情况下,实际上是一个数组数组)。
所以这取决于它的作用:
$.getJSON(url, null, function(data) {
// What is the type of data here ?
从您的控制器和调试器的显示,我认为数据本身就是一个数组数组。您应该直接将它传递给图表API(没有sData = data.toString())函数,它实际上将数组['a','b','c']转换为表示数组的String,如“[” a','b','c']“);
// Callback parameter renamed to show it is an Array of Arrays
$.getJSON(url, null, function(aaData) {
// ... skipped ...
series: [{
type: 'pie',
name: 'Incidents by Site',
data: aaData /* Use the Array itself */
}]
编辑:我的解决方案仅在控制器输出如下内容时才有效:
{
data : [[ "Arecleoch", 21], ["Whatever", 42]]
}
但是看起来您的控制器会返回类似
的内容{
data : "[['Arecleoch', 21],['Whatever', 42]]"
}
(也许没有{data:}部分,我不知道你是否需要一个顶级元素,或者你是否正在以JSON方式正确地返回数组)
是这样的吗?如果是这样,那么你必须要么: