【发布时间】:2011-12-01 21:05:03
【问题描述】:
因此,当我尝试转义 JSON 的特殊字符时,jsStringFormat() 遇到了一个有趣的问题。我正在使用 jQuery 数据表插件并对 Coldfusion 进行 AJAX 调用。
似乎正在发生的事情是 jsStringFormat() 正在转义撇号字符并将 \' 放入我的 JSON 中。根据 JSON 规范,单撇号不需要转义,因此会中断。
这是我的 JSON 返回示例
{
"sEcho": 2,
"iTotalRecords": 659,
"iTotalDisplayRecords": 201,
"aaData": [
["516", "", "54d 7h 12m", "02- Revenue", "", "Assist in validating error in JCA provided Discount Commission report", "Received", "Work Request", "Jan 1, 2012"],
["616", "", "16d 7h 12m", "02- Revenue", "", "Order/Install new POS Terminal at Katie\'s Workstation", "In Progress", "Work Request", "Oct 31, 2011"],
["617", "", "15d 7h 12m", "02- Revenue", "", "Replace #6081 POS Printer at Kim\'s Desk", "Received", "Work Request", "Oct 31, 2011"]
]
}
您可以清楚地看到描述中插入的\'。
我真的需要找到一种方法来防止jsStringFormat() 转义撇号。
更新
到目前为止,有这段代码用于尝试填充 aaData 数组。现在我只得到逗号,所以我知道它的循环正确,但没有在正确的地方填充数据。
所有这些都是基于数据表coldfusion数据源代码http://www.datatables.net/development/server-side/coldfusion
<cfcontent reset="Yes" />
<cfset aaData = [] />
<cfset datasetRecords = [] />
<cfloop query="qFiltered" startrow="#val(url.iDisplayStart+1)#" endrow="#val(url.iDisplayLength)#">
<cfif currentRow gt (url.iDisplayStart+1)>,</cfif>
<cfloop list="#listColumns#" index="thisColumn">
<cfif thisColumn neq listFirst(listColumns)>,</cfif>
<cfif thisColumn is "version">
<cfif version eq 0>"-"
<cfelse><cfset datasetData["#version#"] />
</cfif>
<cfelse><cfset datasetData[""] = qFiltered[thisColumn][qFiltered.currentRow] />
</cfif>
<cfset ArrayAppend(datasetRecords, datasetData ) />
</cfloop>
<cfset ArrayAppend(datasetRecords, aaData ) />
</cfloop>
<cfset record = {} />
<cfset record["sEcho"] = val(url.sEcho) />
<cfset record["iTotalRecords"] = qCount.total />
<cfset record["iTotalDisplayRecords"] = qFiltered.recordCount />
<cfset record["aaData"] = aaData />
<cfoutput><cfdump var="#record#"></cfoutput>
<cfoutput>#serializeJSON(record)#</cfoutput>
【问题讨论】:
-
phihag,正如 John 在下面所说:JSStringFormat 旨在转义数据以包含在 JavaScript 中,而不是 JSON。 此外,在下一个版本中,Adobe 将使用 OWASP/ESAPI 库,并提供更明确的
encodeForJavaScript和encodeForJson函数。 -
@JasonDean 对不起,你是对的,那条评论放错了地方,而且是拖钓。删了。
-
@phihag 你们太棒了。我的也删了。谢谢
-
我假设您的其他问题与您在此处的更新基本相同(尽管显然您已经在此处更新了一些代码)。您可能想从这里删除它,因为这确实是一个不同的问题。
标签: javascript json coldfusion datatables