在ColdFusion 9中将数据呈现为json的问题

时间:2017-10-12 13:30:03

标签: coldfusion

我是ColdFusion的新手,我在将json数据渲染到jquery数据表时面临一个问题。下面是我的数据表

的ajaxSource页面

getData.cfm

<cfcontent type="application/x-javascript">

<cfset partyId = 100001 />

<cfstoredproc procedure="proc_get_uploaded_details" datasource="#request.dataSource#">
<cfprocparam value="#partyId#" cfsqltype="CF_SQL_BIGINT">
<cfprocresult name="getUploadDtls">
</cfstoredproc>

<cfset data = [] />

<cfoutput query="getUploadDtls">
<cfif user_session_id eq Session.SessionID>
<cfset deleteLink = "<span class='delete-link link'>Delete</span>" />
<cfelse>
<cfset deleteLink = "">
</cfif>
    <cfset obj = {
        "ID" = id,
        "ORG_NAME" = original_name,
		"GEN_NAME" = generated_name,
		"TYPE" = type,
		"PATH" = path,
		"URL" = "<a href='renderpdf.cfm?path=#path#&name=#original_name#' target='_blank'>Preview</a>",
		"DELETE" = deleteLink
	     } />
	     <cfset arrayAppend(data, obj) />
</cfoutput>

<cfprocessingdirective suppresswhitespace="Yes">
    <cfoutput>
        {"aaData":
        #serializeJSON(data)#
        }
    </cfoutput>
</cfprocessingdirective>

<cfsetting enablecfoutputonly="No" showdebugoutput="No">

以下是此页面的json结果

       {"aaData"://
    [{"GEN_NAME":"pdf_60.pdf","PATH":"C:\\NAM\\WebUploads\\100001\\Medical Reports\\pdf_60.pdf","DELETE":"<span class='delete-link link'>Delete</span>","ORG_NAME":"pdf.pdf","ID":33,"TYPE":"Medical Reports","URL":"<a href='renderpdf.cfm?path=C:\\NAM\\WebUploads\\100001\\Medical Reports\\pdf_60.pdf&name=pdf.pdf' target='_blank'>Preview<\/a>"}]
    }

在上面的结果中,两个额外的正斜杠从一些地方追加,就在{"aaData":之后,还有一个额外的反斜杠在锚标记<\/a>的关闭时附加了我不知道从这包括在哪里。

此页面在ColdFusion 10中完美运行,问题出在CF 9服务器上。

这是ColdFusion 10中的json结果

        {"aaData":
    [{"GEN_NAME":"pdf_60.pdf","PATH":"C:\\NAM\\WebUploads\\100001\\Medical Reports\\pdf_60.pdf","DELETE":"<span class='delete-link link'>Delete</span>","ORG_NAME":"pdf.pdf","ID":33,"TYPE":"Medical Reports","URL":"<a href='renderpdf.cfm?path=C:\\NAM\\WebUploads\\100001\\Medical Reports\\pdf_60.pdf&name=pdf.pdf' target='_blank'>Preview</a>"}]
    }

这里没有额外的斜线。为什么会这样?

1 个答案:

答案 0 :(得分:3)

从评论中推广

ColdFusion管理员有一个安全设置, Prefix serialized JSON with:。默认情况下,它会设置为两个正斜杠,就像您看到//一样。这有助于保护代码免受某些JavaScript漏洞的影响。您可以禁用该设置,但需要研究这样做的安全后果。或者,您可以在开始执行任何操作之前从返回的JSON中删除前两个字符。 See this reference。我不建议禁用该设置。

您可以执行以下操作来删除这些初始字符:

right(data,stringlen(data)-2)

这只是一种方法。当然还有其他的。