jsStringFormat()和带有JSON的撇号

Bri*_*ian 6 javascript coldfusion json datatables

所以当我jsStringFormat()试图逃避JSON的特殊字符时,我遇到了一个有趣的问题.我正在使用jQuery datatables插件并对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"]
    ]
}
Run Code Online (Sandbox Code Playgroud)

您可以清楚地看到\'插入说明中.

我真的需要找到一种方法来防止jsStringFormat()逃避撇号.


UPDATE

到目前为止,有这个代码试图填充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>
Run Code Online (Sandbox Code Playgroud)

Joh*_*ess 6

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

另一方面,SerializeJSON实际上是指输出JSON,并符合JSON规范.


小智 5

我遇到了与datatables相同的问题.我做了什么修复它是创建jsstringformat字符串,然后对返回的字符串执行替换以删除所有''with'的实例.

<cfset thisColumnString = jsStringFormat(trim((qFiltered[thisColumn][qFiltered.currentRow])))>
<cfset thisColumnString = replacenocase(thisColumnString,"\'","'","all")>
"#thisColumnString#"
Run Code Online (Sandbox Code Playgroud)