You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将ColdFusion生成的JSON字符串传入JavaScript函数?

解决ColdFusion(Lucee)生成JSON传入JavaScript函数的语法错误问题

你遇到的「Uncaught SyntaxError: Invalid or unexpected token」问题,本质是JSON字符串的双引号与HTML属性的单引号嵌套后,破坏了JavaScript的语法结构。Lucee的serializeJSON输出的标准JSON本身包含双引号,直接塞进href="javascript:..."的单引号里,浏览器解析时会把JSON里的双引号当成字符串结束标记,导致语法报错。下面给你几个经过验证的可行方案:

方案一:直接将JSON注入为JS对象(推荐)

最稳妥的方式是跳过字符串传递,直接把ColdFusion生成的JSON转换成JavaScript对象,再通过点击事件调用函数。这样完全避开引号冲突:

<script>
    // 直接把序列化后的JSON转为JS对象,无需额外解析
    const userData = #serializeJSON(x)#;
    
    function myJSFunction(z) {
        console.log(z);
    }
</script>

<cfset x = {"firstName"="Bob", "lastName"="Smith"} />
<cfdump var="#x#" />
<cfset y = serializeJSON(x) />
<cfdump var="#y#" />

<cfoutput>
    <!-- 用onclick绑定事件,直接传递JS对象 -->
    <a href="javascript:void(0);" onclick="myJSFunction(userData);">点击测试(推荐方案)</a><br/>
</cfoutput>

这种方式下,ColdFusion会直接把JSON输出为合法的JS对象字面量,JavaScript可以直接使用,不需要再调用JSON.parse(),代码更简洁也更安全。

方案二:对JSON做JS语境转义后传递字符串

如果必须通过href="javascript:..."传递字符串形式的JSON,需要对序列化后的JSON做JS语境的完整转义,推荐使用Lucee的encodeForJavaScript函数,它会处理引号、换行符等所有JS特殊字符:

<script>
    function myJSFunction(z) {
        // 把转义后的字符串解析为JS对象
        const parsedData = JSON.parse(z);
        console.log(parsedData);
    }
</script>

<cfset x = {"firstName"="Bob", "lastName"="Smith"} />
<cfdump var="#x#" />
<!-- 先序列化JSON,再做JS编码 -->
<cfset y = encodeForJavaScript(serializeJSON(x)) />
<cfdump var="#y#" />

<cfoutput>
    <a href="javascript:myJSFunction('#y#');">点击测试(字符串传递方案)</a><br/>
</cfoutput>

encodeForJavaScript会把JSON里的双引号转义为\",同时处理其他可能导致语法错误的特殊字符,确保嵌入到单引号包裹的字符串中时,JS能正确解析。

为什么JSStringFormat无效?

JSStringFormat的作用仅仅是把字符串中的单引号替换为两个单引号,用来处理ColdFusion字符串里的单引号转义,但它没有针对JSON中的双引号和JS语境做全面处理,所以在这种场景下无法解决问题。


内容的提问来源于stack exchange,提问作者SharonG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:23:39