【问题标题】:Loading canvasjs chart with data from database使用数据库中的数据加载 canvasjs 图表
【发布时间】:2014-02-25 13:22:36
【问题描述】:

我正在使用 coldfusion 将数据加载到我的饼图中,但我得到的不是饼图,而是 35 个数据点 的列表,并且没有显示图表。

这是我的代码:

<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>

有其他人遇到过这个问题吗?

【问题讨论】:

    标签: jquery coldfusion coldfusion-9 canvasjs


    【解决方案1】:

    两件事。
    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>
    

    【讨论】:

    • (编辑)与问题无关:一定要始终 var/local 作用域函数局部变量。此外,如果不使用结果,则无需捕获结果。写&lt;cfset QuerySetCell(....))&gt;
    【解决方案2】:

    问题是您将手动构造的 JSON 字符串与 returnformat="json" 混合在一起。因此,当 CF 对数组进行编码时,它不知道数组 elements 已经被编码(部分编码),并将元素视为字符串,转义现有的引号。所以最终结果不是 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 格式。

    【讨论】:

      【解决方案3】:

      您的 json 数据格式不正确 - 数组应该用 [] 括起来,变量用引号括起来。尝试输出以下 JSON - 在您的情况下,只需一个 sting 连接即可。

      [{"y": 142, "legendtext": "In Progress"}, {"y": 1083, "legendtext": "New"},{"y": 48, "legendtext": "Error"}]
      

      【讨论】:

      • 该数组将由[...] 表示。因为他们使用的是returnformat="json",所以它是自动完成的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多