【问题标题】:Passing data from controller to JavaScript in GSP在 GSP 中将数据从控制器传递到 JavaScript
【发布时间】:2014-02-22 12:37:27
【问题描述】:

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

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

<script>
  var data = ${invoice as JSON};
</script>

我认为这不是一个好主意,因为我必须使用 (Grails 2.2)

grails.views.default.codec = "none"

或(Grails 2.3)

grails {
  views {
    gsp {
      codecs {
        expression = 'none'
      }
    }
  }
}

现在,我发现我可以像这样创建小标签库:

def json = { attrs, body ->
  out << (attrs.model as JSON)
}

我可以在 GSP 中使用以下代码:

<script>
  var data = <g:json model="${invoice}" />;
</script>

现在,问题。使用 taglib 是最佳实践吗?如果没有,请给我最好的解决方案。

【问题讨论】:

  • 如何将json字符串从控制器发送到视图,并使用${json.encodeAsJavaScript()}
  • encodeAsJavaScript() 给我:var data = \u007b\u0022key1\u0022:\u0022val1\u0022\u002c\u0022key2\u0022:3.14\u007d
  • 哦,对了,在这种情况下,您需要原始数据。 ${raw(json)}
  • ${raw(json)} 有效!但是json 必须是字符串,而不是 JSON 对象。谢谢。

标签: javascript json grails


【解决方案1】:

转换答案中的评论。您可以在控制器中创建 JSON 字符串并将其传递给视图。 Grails 2.3.x 具有不对您的内容进行编码的原始编解码器。有关此编解码器的更多信息here

例子:

class MyController {
  def index() {
    String invoiceString = invoice as JSON
    [json: invoiceString]
  }
}

index.gsp

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

【讨论】:

    【解决方案2】:

    使用 grails 2.4.4。

    以上答案对我不起作用。

    所以添加对我有用的东西。

    来源: http://aruizca.com/how-to-render-json-properly-without-escaping-quotes-inside-a-gsp-script-tag/

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

    【讨论】:

    • 这是在 Grails 3.1.4 上对我有用的唯一解决方案
    【解决方案3】:

    现在,我正在升级到 Grails 3.2.4。我发现 Sérgio Michels 的方法仍然有效。只需确保 jsonStringString 对象即可。

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

    如果不是String 对象,你可以使用类似下面的代码。

    <script>
      var data = ${raw(mapInstance.encodeAsJSON().toString)};
    </script>
    

    【讨论】:

    • 这就是我的不工作的原因!我的方法声明我正在返回一个 def 对象。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-06
    • 2016-02-09
    • 1970-01-01
    • 2012-08-13
    • 1970-01-01
    相关资源
    最近更新 更多