【问题标题】:How can I cfoutput a JavaScript String?如何cfoutput 一个JavaScript 字符串?
【发布时间】:2019-12-14 09:51:15
【问题描述】:

我正在 cfm 文件的脚本标签中构建 JSON 字符串。我想找到一种方法将此 JSON 字符串转换为 cfoutput,以便页面可以显示 JSON。

我目前只是document.write()ing json,它在浏览器中检索 JSON,但不会通过 POST 请求返回任何内容。我试过使用 toScript() Coldfusion 函数,但我认为这与我想要的相反(当我想将 js var 放入 cf 时,将 cf var 放入 js)。

我现在正在做这个

<cfoutput>
    <script type = "text/javascript"> 
        var someJSON = "{\"some\": \"data\"}";
        document.write(JSON.stringify(someJSON));
    </script>
</cfoutput>

我仍在处理冷融合,如果这看起来过时,我很抱歉。我想将someJSON 传递给一个coldfusion 变量,这样我就可以使用cfoutput 标记,这样我就可以得到一个对这个特定端点的POST 请求的响应,因为目前我没有得到任何响应。

【问题讨论】:

  • 确保您understand the difference between serverside and clientside。如果您有客户端 JavaScript 并希望向服务器端 ColdFusion 提交信息,则需要通过 HTTP 发送它们。这可以通过使用 &lt;form&gt; 提交或通过 FormData 使用 AJAX(XHR = XML HTTP 请求)来完成。
  • 但不会通过 POST 请求返回任何内容 您能否详细说明“使用 POST 请求”是什么意思?你是说另一个页面正在向你的 .cfm 脚本发布数据,并且你想用 cfoutput 显示它吗?
  • 我想知道用户是否只想设置一个&lt;input type="hidden"&gt; 并以这种方式发布。用户可以这样做:stackoverflow.com/questions/2979772/…
  • 是的,这是可能的——尽管提到“这个特定的端点”表明脚本可能是接收一个 POST。很难说没有更多的澄清......
  • 编辑 @KarimShoorbajee - 是的,这不会像你希望的那样工作。即使您可以在同一文件they don't interact all 中混合 JS/CF 代码。你不能从 CF 输出一个 javascript 变量,因为它对 JS 一无所知,JS 也不理解 CFML。即使它做到了,时机也使它成为不可能。 CF 代码首先执行。它被转换为 html 并返回到 Web 服务器。然后 CF 服务器断开连接。当您的浏览器获取它时,CF 服务器早已不复存在。

标签: javascript json coldfusion stringify cfoutput


【解决方案1】:

要将字符串从 ColdFusion 中取出并放入 Javascript,您需要执行以下操作:

<cfset cfdata = {"some": "data"}>


<cfoutput>
<script type = "text/javascript"> 
    var someJSON = #serializeJSON(cfdata)#;
    document.write(JSON.stringify(someJSON));
</script>
</cfoutput>

结果

见:https://cffiddle.org/app/file?filepath=f9d44f3a-5711-456e-b25a-bf31fead1fa8/6677fc2a-f41b-47d7-b11a-352575f95738/4e1ecc15-ac98-450f-a7fe-b28cf395b012.cfm

【讨论】:

  • 我认为他正试图做相反的事情 ;-) 但是......尽管重新阅读了两次帖子,我仍然不完全清楚为什么 - 或者它是否真的需要。跨度>
【解决方案2】:

您有一些 form.cfm 正在向 data.cfm 发出 Ajax 请求。 data 文件应将 JSON 返回到 form 文件中的 JavaScript。

data.cfm 文件基本上需要这样做:

<cfscript>
data = {
    a: 1,
    b: 2,
    c: 3
};

cfcontent(type="application/json; charset=UTF-8")
writeOutput(serializeJSON(data))
</cfscript>

cfcontent 函数告诉浏览器返回的内容是 JSON。没有它,它只是一个字符串,你必须用 JavaScript 做更多的事情来理解这个字符串。

返回的数据看起来像

{"A":1,"B":2,"C":3}

因为 ColdFusion 以大写形式存储结构键。为了使数据以小写键的形式返回,您可以这样做

data = {};
data["a"] = 1;
data["b"] = 2;
data["c"] = 3;

data = {
    "a": 1,
    "b": 2,
    "c": 3
};

然后将返回带有小写键的 JSON。

{"a":1,"b":2,"c":3}

【讨论】:

    猜你喜欢
    • 2015-04-25
    • 2020-08-20
    • 1970-01-01
    • 2014-05-26
    • 2013-03-17
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 2021-01-19
    相关资源
    最近更新 更多