javascript - jsStringFormat() 和带有 JSON 的撇号

标签 javascript json coldfusion datatables

因此,当我尝试转义 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>

最佳答案

JSStringFormat 设计用于转义数据以包含在 JavaScript 中,而不是 JSON。在 JavaScript 中,单引号是一个需要转义的字符。

另一方面,SerializeJSON实际上是为了输出 JSON,并且符合 JSON 规范。

关于javascript - jsStringFormat() 和带有 JSON 的撇号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7668450/

相关文章:

javascript - AngularJS + ngTable + plunker 将无法正确呈现表格

javascript - 如何从 Firefox Addon XUL 树中添加和删除行

php - 尝试初始化 JSONObject 时出现 Android ResponseListener JSON 错误

java - Android 应用程序不从 MYSQL 获取数据

json - Node.js 中使用 mongoose 将 JSON 插入 mongoDB 失败

javascript - 在 array.indexOf(x) 中搜索总是返回 -1 即使该值存在

javascript - 防止人们在不刷新页面的情况下发送多个表单

coldfusion - cffeed函数: show just most recent post?

email - 更改 CFMail 中附件的文件名

json - 显示 JSON 数组数据时出错 - 无法将复杂对象类型转换为简单值