【问题标题】:How do I pass a JSON array to a JavaScript variable on my GSP page?如何将 JSON 数组传递给我的 GSP 页面上的 JavaScript 变量?
【发布时间】:2015-10-01 13:02:42
【问题描述】:

我有以下控制器动作:

def doSomething() {
  [data: data as JSON]
}

在我的 GSP 上,我可以输出数据参数:

${data}

由于数据代表有效的 JSON,我想在我的 GSP 的 JavaScript 块中使用它。

<script type="text/javascript">
var data = [
            { Date: "2015-09-14", DayOfMonth: 14, Type: "Views", Amount: 0, y1: 10, }
           ];
</script>

替换硬编码的 JSON 变量。我知道我可以用这样的字符串替换:

<script type="text/javascript">
var data = "${data}";
</script>

<script type="text/javascript">
var data = "${raw(data)}";
</script>

前者可以很好地工作原始类型,如字符串,但如果我将 JSON 数组传递给 JavaScript 变量,它会失败。当我在控制台中打印 JavaScript 数据变量的内容时,我得到:

[{&quot;Date&quot;:&quot;2015-09-13T22:00:00Z&quot;,&quot;DayOfMonth&quot;:14,&quot;Type&quot;:&quot;Views&quot;,&quot;Amount&quot;:1}]

如何将 JSON 数组传递给我的 GSP 页面上的 JavaScript 变量?

【问题讨论】:

    标签: grails gsp


    【解决方案1】:

    这似乎是一个尚未解决的编码问题。

    解决方案 1 - 在本地禁用编码器

    <g:applyCodec encodeAs="none">
        var data = ${data};
    </g:applyCodec>
    

    解决方案 2 - 影响整个页面

    <%@page defaultCodec="none" %>
    

    解决方案 3 - 使用自定义标签

    class MyTagLib {
        static defaultEncodeAs = [taglib:'none']
    
        def writeWithoutEncoding = {attrs ->
            out << attrs.input
        }
    }
    

    在 GSP 页面中:

    var data = <g:writeWithoutEncoding input="${data}"/>;
    

    参考:https://jira.grails.org/browse/GRAILS-11829http://aruizca.com/how-to-render-json-properly-without-escaping-quotes-inside-a-gsp-script-tag/

    【讨论】:

    • 您也可以添加创建taglib的解决方案。
    • 谢谢,根据您的建议,我添加了第三种使用自定义标签的方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2017-05-08
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多