在GSP中将数据从控制器传递到JavaScript

在GSP中将数据从控制器传递到JavaScript,javascript,json,grails,Javascript,Json,Grails,我想通过直接在视图中嵌入数据将数据从控制器传递到javascript。(因此不会有额外的请求。) 我的第一个解决方案是在GSP中使用作为JSON,如下所示: <script> var data = ${invoice as JSON}; </script> def json = { attrs, body -> out << (attrs.model as JSON) } 或(Grails2.3) 现在,我发现我可以创建这样的小标记库: &l

我想通过直接在视图中嵌入数据将数据从控制器传递到javascript。(因此不会有额外的请求。)

我的第一个解决方案是在GSP中使用
作为JSON
,如下所示:

<script>
  var data = ${invoice as JSON};
</script>
def json = { attrs, body ->
  out << (attrs.model as JSON)
}
或(Grails2.3)

现在,我发现我可以创建这样的小标记库:

<script>
  var data = ${invoice as JSON};
</script>
def json = { attrs, body ->
  out << (attrs.model as JSON)
}
defjson={attrs,body->

out转换应答中的注释。您可以在控制器中创建JSON字符串并将其传递给视图。Grails 2.3.x具有未编码内容的原始编解码器。有关此编解码器的详细信息

例如:

class MyController {
  def index() {
    String invoiceString = invoice as JSON
    [json: invoiceString]
  }
}
普惠制指数


var data=${raw(json)};
使用Grails2.4.4

上述答案对我来说并不适用

所以加上对我有用的东西

资料来源:


var data=${data};

现在,我正在升级到Grails 3.2.4。我发现Sérgio Michels的方法仍然有效。只要确保
jsonString
是一个
String
对象即可

<script>
  var data = ${raw(jsonString)};
</script>

如何将json字符串从控制器发送到视图,并使用
${json.encodeAsJavaScript()}
?encodeAsJavaScript()给我:
var data=\u007b\u0022key1\u0022:\u0022val1\u0022\u002c\u0022key2\u0022:3.14\u007d
哦,在这种情况下,您需要原始数据。
${raw(json)}
${raw(json)}工作!但是
json
必须是字符串,而不是json对象。谢谢。这是我在Grails 3.1.4上唯一有效的解决方案
<script>
  var data = ${raw(json)};
</script>
<g:applyCodec encodeAs="none">
    var data = ${data};
</g:applyCodec>
<script>
  var data = ${raw(jsonString)};
</script>
<script>
  var data = ${raw(mapInstance.encodeAsJSON().toString)};
</script>