繁体   English   中英

Grails JavaScript呼叫控制器方法

[英]Grails javascript call controller method

在grails视图中,我需要调用javascript方法来获取一些信息,因此我需要执行以下提交操作:

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

并且在generateReport()的结尾,我需要调用/重定向到Controller的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}]").

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

在第一个选项中,将其分配为参数时,因为它不是控制器的模型参数,因此显示为null

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

因此,您最好尝试从控制器获取jSon作为模型,然后将其定义为params。

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

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

希望这可以帮助! 谢谢。

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

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

你可以试试这个

像这样在您的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) {
        }
    });                 
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM