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

时间:2015-10-01 13:02:42

标签: grails gsp

我有以下控制器操作:

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>

前者可以像Strings一样工作原始类型,但是如果我将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变量?

1 个答案:

答案 0 :(得分:2)

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

解决方案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/