如何从Javascript方法将调用映射到Grails控制器?我看到一个使用PHP的方法,但没有使用grails:
function getSelected(checkList)
{
var idList = new Array();
var loopCounter = 0;
//find all the checked checkboxes
jQuery("input[name=" + checkList + "]:checked").each
(
function()
{
//fill the array with the values
idList[loopCounter] = jQuery(this).val();
loopCounter += 1;
}
);
//call here
}
编辑:
${remoteFunction(controller:"person", action:"runThroughAll", params:"[ids:idList]")}
答案 0 :(得分:6)
所以,我觉得你在这里要问的有两件事。我要解决他们两个问题。首先,如何从JavaScript获取调用grails控制器的URL?在我的GSP页面中(我在主要布局中进行了操作,但无论如何),我喜欢这个小技巧:
<script>
myapp.url.root = "<g:resource dir='' file='' />" + "/";
</script>
无论在哪里部署,都可以为您提供应用的基础。然后,您可以使用JavaScript构建网址:
myurl = myapp.url.root +“path / to / controller”
然后使用该URL进行jQuery ajax调用。
然后确保您的控制器已设置为响应您刚才表达的任何网址格式。
第二个问题似乎是“如何发回HTML片段”?
在控制器本身内部,从请求中获取参数,使用它来找出你需要的任何东西,然后渲染gsp,传入你创建的模型。它看起来像这样:
def show() {
def data = [hypothesis : metadataService.getHypothesis(params.id) as JSON]
render(view:"create", model:data)
}
然后在jQuery中,您的成功处理程序将获得返回响应作为参数,然后您可以检查/操作/添加到dom。
希望所有这些都是有道理的。如果我掩饰某些事情或者没有回答你提出的问题,请告诉我。
编辑:为了将来参考,这里是重写的javascript方法,我们在聊天中找到了:
function getSelected(checkList){
var idList = $("input[name='" + checkList + "']:checked").map(function(){ return $(this).val(); });
$.ajax({
url: "/path/to/controller",
type:"POST",
data:{ids:JSON.stringify(idList)}
success:mySuccessFunction
});
}