サーブレットからデータを取得しています。サーブレットから送信するjsonオブジェクトのsysoutは{"jsonArray":[{"bugzilla":20、 "redmind":14}] }
今私のJavaスクリプトは
<script type="text/javascript">
var chart;
$(document).ready(
function() {
chart = new Highcharts.Chart({
chart : {
renderTo : 'container',
},
title : {
text : 'Bug chart'
},
tooltip : {
formatter : function() {
var s;
if (this.point.name) { // the pie chart
s = '' + this.point.name + ': ' + this.y
+ ' Bugs';
} else {
s = '' + this.x + ': ' + this.y;
}
return s;
}
},
labels : {
items : [ {
html : 'Total Bugs',
style : {
left : '40px',
top : '8px',
color : 'black'
}
} ]
},
series : [ {
type : 'pie',
name : 'Total Bugs',
data : [],
center : [ 100, 80 ],
size : 100,
showInLegend : false,
dataLabels : {
enabled : false
},
}, ]
}, function getdata(chart) {
var tmp="";
var receivedData="";
$.ajax({
url : 'http://localhost:8080/PRM/GraphServlet',
dataType : 'json',
error : function() {
alert("error occured!!!");
},
success : function(data) {
$.each(data.jsonArray, function(index)
{
$.each(data.jsonArray[index],
function(key,value) {
tmp = "['" + key + "', " + value + "],";
receivedData += tmp;
alert("receivedData: " + receivedData);
});
});
alert(receivedData.substring(0, 34));
chart.series[0].setData([receivedData.toString().substring(0, 34)]);
}
}
);
});
});
</script>
アラートはreceivedDataを出力します:['bugzilla'、20]、['redmind'、14]これは期待していますが、問題は次のように設定した場合です。
chart.series [0] .setData([receivedData。toString()。substring(0、34)]);
その後、円グラフが機能しません。ツールチップのない1/4円のような1つの部分のみが表示されます
データは文字列であり、配列の配列である必要があります。内部配列は2つの要素で構成され、最初の要素は文字列としてのキーで、2番目の要素は数値形式の値です。
success : function(data) {
var chartData=[];
$.each(data.jsonArray, function(index)
{
$.each(data.jsonArray[index],
function(key,value) {
var point = [];
point.Push(key);
point.Push(value);
chartData.Push(point);
});
});
chart.series[0].setData(chartData);
}
上記の@JugalThakkarの回答のように、最初にデータを準備してから、v5から利用できるupdate
関数を使用できます。
chart.update({
series: preparedSeriesData
});
これにより、チャートが動的に更新されます。