SERIESLABEL 或 ITEMLABEL 中存在单引号或双引号,导致 CFCHART 出错
Presence of single or double quotes in SERIESLABEL or ITEMLABEL giving error in CFCHART
我正在为我的一个应用程序使用 CF 饼图。但它的工作很奇怪。以下代码是图表代码,它给出了一个错误。它甚至不显示图表。我知道,这是由于查询列的值中存在双引号 col1
.
<cfoutput>
<script type="text/javascript">
function Navigate(test){
alert(test);
}
</script>
<cfset testquery = queryNew("col1,Col2", "varchar,varchar") >
<cfset queryAddRow(testquery, 1)>
<cfset querySetCell(testquery, "col1", 'This is the "first" row') >
<cfset querySetCell(testquery, "Col2", 5000) >
<cfset queryAddRow(testquery, 1)>
<cfset querySetCell(testquery, "col1", 'This is the second row') >
<cfset querySetCell(testquery, "Col2", 2500) >
<cfset queryAddRow(testquery, 1)>
<cfset querySetCell(testquery, "col1", 'This is the third row') >
<cfset querySetCell(testquery, "Col2", 8500) >
<CFCHART Format="Html" CHARTWIDTH="600" CHARTHEIGHT="650" TITLE="Pie Chart in CF11" URL="javascript:Navigate('$SERIESLABEL$')">
<CFCHARTSERIES TYPE="pie" COLORLIST="##CA5940,##6FCF42,##4286CF" >
<CFLOOP FROM="1" TO="#testquery.RecordCount#" INDEx="i">
<CFCHARTDATA ITEM="#testquery.col1[i]#" VALUE="#testquery.Col2[i]#">
</CFLOOP>
</CFCHARTSERIES>
</CFCHART>
</cfoutput>
我已经检查了视图源中图表的 JSON,没问题。但是给出上述错误的代码。所以不确定为什么会出错。没有双引号,代码按预期工作,但我需要双引号,如果我删除它,它会影响应用程序。
我也尝试过将双引号替换为单引号,在这种情况下,图表正在显示,但如果我们点击第一行区域,它会在控制台中给出相同的错误。
所以使用引号是这里的主要问题。但是我需要上面的代码来显示图表,当点击区域时,它应该显示相应的标签。
我不确定我错过了什么,或者代码中有什么错误。
您是否尝试过转义 JSON 字符串中的引号?
例如这样:
<cfset querySetCell(testquery, "col1", 'This is the \"first\" row') >
我在 trycf.com 上创建了您的示例代码的要点,它似乎有效
http://trycf.com/gist/e3321edb3481411078b75ad187cae52b/acf11?theme=monokai
我还在我们的一台 ColdFusion 11 服务器上尝试了完全相同的代码,它也工作正常。那么你是说你的示例代码不工作还是你说你的实际代码仍然不工作?如果它是您的实际代码,那么您的示例中肯定没有显示其他内容。如果您的数据来自数据库,那么您需要确保这些字符在 ColdFusion 解析它时被正确转义。
既然您了解了字符需要如何转义,您可以使用评论中的 ScottJibben 建议,只需调用 JSStringFormat()
即可为您转义这些字符。
<CFCHARTDATA ITEM="#JSStringFormat(testquery.col1[i])#" VALUE="#testquery.Col2[i]#">
我正在为我的一个应用程序使用 CF 饼图。但它的工作很奇怪。以下代码是图表代码,它给出了一个错误。它甚至不显示图表。我知道,这是由于查询列的值中存在双引号 col1
.
<cfoutput>
<script type="text/javascript">
function Navigate(test){
alert(test);
}
</script>
<cfset testquery = queryNew("col1,Col2", "varchar,varchar") >
<cfset queryAddRow(testquery, 1)>
<cfset querySetCell(testquery, "col1", 'This is the "first" row') >
<cfset querySetCell(testquery, "Col2", 5000) >
<cfset queryAddRow(testquery, 1)>
<cfset querySetCell(testquery, "col1", 'This is the second row') >
<cfset querySetCell(testquery, "Col2", 2500) >
<cfset queryAddRow(testquery, 1)>
<cfset querySetCell(testquery, "col1", 'This is the third row') >
<cfset querySetCell(testquery, "Col2", 8500) >
<CFCHART Format="Html" CHARTWIDTH="600" CHARTHEIGHT="650" TITLE="Pie Chart in CF11" URL="javascript:Navigate('$SERIESLABEL$')">
<CFCHARTSERIES TYPE="pie" COLORLIST="##CA5940,##6FCF42,##4286CF" >
<CFLOOP FROM="1" TO="#testquery.RecordCount#" INDEx="i">
<CFCHARTDATA ITEM="#testquery.col1[i]#" VALUE="#testquery.Col2[i]#">
</CFLOOP>
</CFCHARTSERIES>
</CFCHART>
</cfoutput>
我已经检查了视图源中图表的 JSON,没问题。但是给出上述错误的代码。所以不确定为什么会出错。没有双引号,代码按预期工作,但我需要双引号,如果我删除它,它会影响应用程序。
我也尝试过将双引号替换为单引号,在这种情况下,图表正在显示,但如果我们点击第一行区域,它会在控制台中给出相同的错误。
所以使用引号是这里的主要问题。但是我需要上面的代码来显示图表,当点击区域时,它应该显示相应的标签。
我不确定我错过了什么,或者代码中有什么错误。
您是否尝试过转义 JSON 字符串中的引号?
例如这样:
<cfset querySetCell(testquery, "col1", 'This is the \"first\" row') >
我在 trycf.com 上创建了您的示例代码的要点,它似乎有效
http://trycf.com/gist/e3321edb3481411078b75ad187cae52b/acf11?theme=monokai
我还在我们的一台 ColdFusion 11 服务器上尝试了完全相同的代码,它也工作正常。那么你是说你的示例代码不工作还是你说你的实际代码仍然不工作?如果它是您的实际代码,那么您的示例中肯定没有显示其他内容。如果您的数据来自数据库,那么您需要确保这些字符在 ColdFusion 解析它时被正确转义。
既然您了解了字符需要如何转义,您可以使用评论中的 ScottJibben 建议,只需调用 JSStringFormat()
即可为您转义这些字符。
<CFCHARTDATA ITEM="#JSStringFormat(testquery.col1[i])#" VALUE="#testquery.Col2[i]#">