如何将 JSON 数组传递到我的 GSP 页面上的 JavaScript 变量?
How do I pass a JSON array to a JavaScript variable on my GSP page?
我有以下控制器操作:
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 数据变量的内容时,我得到:
[{"Date":"2015-09-13T22:00:00Z","DayOfMonth":14,"Type":"Views","Amount":1}]
如何将 JSON 数组传递到我的 GSP 页面上的 JavaScript 变量?
这似乎是一个尚未解决的编码问题。
解决方案 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-11829 and http://aruizca.com/how-to-render-json-properly-without-escaping-quotes-inside-a-gsp-script-tag/
我有以下控制器操作:
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 数据变量的内容时,我得到:
[{"Date":"2015-09-13T22:00:00Z","DayOfMonth":14,"Type":"Views","Amount":1}]
如何将 JSON 数组传递到我的 GSP 页面上的 JavaScript 变量?
这似乎是一个尚未解决的编码问题。
解决方案 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-11829 and http://aruizca.com/how-to-render-json-properly-without-escaping-quotes-inside-a-gsp-script-tag/