在grails视图中,我需要调用一个javascript方法来获取一些信息,所以我有一个这样的提交动作:
Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.13.0-65-generic x86_64)
* Documentation: https://help.ubuntu.com/
Last login: Mon Oct 19 19:06:03 2015 from xxx.xxx.xxx.xxx
me@ubuntu:~$ python3
Python 3.4.0 (default, Jun 19 2015, 14:20:21)
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import curses
>>>
并且在generateReport()的末尾我需要调用/重定向到Controller的<input type="submit" name="submit" class="submit action-button" value="Generar" onclick="generateReport()" style="float: right" />
操作(因为我已经在show
操作了)
我已尝试过
create
1)数据达到null 2)编译错误:
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}]" />
答案 0 :(得分:0)
var json 无法作为params分配给数据,因为var jSon 是一个javascript变量。 params属性中的数据需要来自控制器的模型参数。
在第一个选项中,当它被指定为params时,因为它不是来自控制器的模型参数,它显示 null 。
第二个选项不起作用,因为这不是从控制器定义模型参数的方式,因此给出编译错误。
因此,您最好尝试将jSon作为控制器的模型,然后定义为params。
或者您可以按照此链接在onclick本身中定义g:remoteFunction
http://grails.github.io/grails-doc/2.2.1/ref/Tags/remoteFunction.html
希望这有帮助!感谢。
答案 1 :(得分:0)
remoteFunction
标记不适用于您的情况,因为在知道jSon的值(客户端)之前,它已呈现为html和JavaScript(服务器端)。
您必须自己进行ajax调用(例如Jquery)。
答案 2 :(得分:0)
你可以试试这个..
在你的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) {
}
});
}