我正在使用 coldfusion 将数据加载到我的饼图中,而不是饼图,我得到 35 datapoints 的列表,并且没有显示图表。
这是我的代码:
<script type="text/javascript">
$(document).ready(function () {
$.getJSON("display.cfc?method=getData&lob=all", function (result) {
alert(result);
var chart2 = new CanvasJS.Chart("piechart", {
theme: "theme2",
legend: {
fontSize: 12,
horizontalAlign: "right",
verticalAlign: "center"
},
data: [{
type: "pie",
showInLegend: true,
dataPoints: result
}]
});
chart2.render();
});
});
</script>
<div id="piechart" style="display: inline-block; height: 200px; width: 400px;"></div>
我的coldfusion函数正在返回:
{y: 142, legendtext: "In Progress"}, {y: 1083, legendtext: "New"},{y: 48, legendtext: "Error"}
这是功能:
<cffunction name="getData" access="remote" returnformat="json">
<cfargument name="lob" type="string" required="yes" />
<cfset var theQuery = getTransitionStatusCounts(#arguments.lob#)>
<cfset var rObj = "">
<cfset var rObjArray = []>
<cfoutput query="theQuery">
<cfset rObj = '{y: #count#, legendtext: "#status#"}'>
<cfset arrayAppend(rObjArray, rObj)>
</cfoutput>
<cfreturn rObjArray>
</cffunction>
还有其他人有这个问题吗?
答案 0 :(得分:2)
2件事。
1.数据点需要在数组中
2.按原样使用coldfusion的json。不要在cfc中手动创建json
$(document).ready(function () {
$.getJSON("display.cfc?method=getData&lob=all", function (result) {
dp = [];
for(var i = 0 ; i< result.DATA.length; i++){
dp.push({y: result.DATA[i][0], label: result.DATA[i][1]})};
var chart2 = new CanvasJS.Chart("piechart", {
theme: "theme2",
data: [{
type: "pie",
dataPoints: dp }]});
chart2.render();});});
这就是我在cfc中所拥有的
<cfcomponent access="remote">
<cffunction name="getData" access="remote" returnformat="json">
<cfargument name="lob" type="string" required="yes" />
<cfset var myQuery = QueryNew("y,label")/>
<cfset QueryAddRow(myQuery,3) />
<cfset QuerySetCell(myQuery, "y" , 142,1) />
<cfset QuerySetCell(myQuery, "label" , "In Progress", 1) />
<cfset QuerySetCell(myQuery, "y" , 1083,2) />
<cfset QuerySetCell(myQuery, "label" , "New",2) />
<cfset QuerySetCell(myQuery, "y" , 48,3) />
<cfset QuerySetCell(myQuery, "label" , "Error",3) />
<cfreturn myQuery/>
</cffunction>
</cfcomponent>
答案 1 :(得分:2)
问题是您正在使用returnformat="json"
混合手动构造的JSON字符串。因此,当CF对数组进行编码时,它不知道数组元素已经编码(部分地),并将元素视为字符串,从而转义现有的引号。所以最终结果不是JSON中的结构数组,即结果如下:
[ "{y: 142, legendtext: \"In Progress\"}",.... ]
...而不是:
[ {"y":142, "legendtext":"In Progress"},....]
您无需滚动自己的JSON。只需创建一个结构数组,CF将完成剩下的工作:
...
<cfoutput query="theQuery">
<!--- use structure notation to preserve case --->
<cfset rObj = {} />
<cfset rObj["y"] = count />
<cfset rObj["legendtext"] = status />
<cfset arrayAppend(rObjArray, rObj)>
</cfoutput>
<cfreturn rObjArray>
此外,为了获得更大的灵活性,您可以让函数返回一个普通数组,然后在从jQuery调用.cfc时使用参数?returnformat=json
指定JSON格式。
答案 2 :(得分:0)
您的json数据格式不正确 - 数组应包含在[]中,变量用引号括起来。尝试输出以下JSON - 只需要一个刺痛连接就可以适用于你的情况。
[{"y": 142, "legendtext": "In Progress"}, {"y": 1083, "legendtext": "New"},{"y": 48, "legendtext": "Error"}]