【问题标题】:Grails javascript call controller methodGrails javascript调用控制器方法
【发布时间】:2015-10-21 23:41:59
【问题描述】:

在 grails 视图中,我需要调用一个 javascript 方法来获取一些信息,所以我有一个这样的提交操作:

<input type="submit" name="submit" class="submit action-button" value="Generar" onclick="generateReport()" style="float: right" />

在 generateReport() 结束时,我需要调用/重定向到控制器的 show 操作(因为我已经在 create 操作)

我试过了

1) var jSon = generateJSON();
    <g:remoteFunction controller="report" action="show" params="[data:jSon]" />

2) var jSon = generateJSON();
    <g:remoteFunction controller="report" action="show" params="[data:${jSon}]" />

1) 数据达到空 2)编译错误:

org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException
Message
Attribute value quote wasn't closed (controller="report" action="show" params="[data:${jSon}]").

【问题讨论】:

  • 您不应该使用remoteFunction 或任何remote* 标签。它们很旧,难以使用,并且在较新版本的 Grails 中不再受支持。您需要学习使用 jquery/javascript 进行自己的 ajax 调用。

标签: javascript grails


【解决方案1】:

你可以试试这个..

像这样在你的 gsp 中声明一个变量..

<script type="text/javascript">
            var yourVariable = "${createLink(url: [controller: 'yourController', action: 'yourAction'])}";
</script>

然后在你的js文件中..你可以使用ajax。

示例 ajax

function checkUsernameAvailable(user, example){
    $.ajax(
    {
        url: yourVariable, <- this variable take from your gsp
        contentType:"text/json",
        type: "get",
        data: ({ id: usernamenya}),
        dataType: "json",
        cache: false,
        async: false,
        success: function(data) {
               //do something here
        },
        error: function(xhr) {
        }
    });                 
}

【讨论】:

    【解决方案2】:

    var json 不能作为参数分配给数据,因为 var jSon 是一个 javascript 变量。 params 属性中的数据需要来自控制器的模型参数。

    在第一个选项中,当它被分配为参数时,因为它不是来自控制器的模型参数,它显示 null。

    第二个选项不起作用,因为这不是从控制器定义模型参数的方法,因此会给出 编译错误。

    所以你最好尝试从控制器获取json作为模型,然后定义为参数。

    或者您可以点击此链接在 onclick 本身中定义 g:remoteFunction

    http://grails.github.io/grails-doc/2.2.1/ref/Tags/remoteFunction.html

    希望这会有所帮助!谢谢。

    【讨论】:

      【解决方案3】:

      remoteFunction 标记不适用于您的情况,因为它被渲染为 html 和 JavaScript(服务器端)在知道 jSon 的值之前(客户端)。

      您必须自己进行 ajax 调用(例如 Jquery)。

      【讨论】:

        猜你喜欢
        • 2012-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-22
        • 1970-01-01
        • 1970-01-01
        • 2017-12-11
        相关资源
        最近更新 更多