2012-03-09 77 views
2

如何将调用从Javascript方法映射到Grails控制器?我看到使用PHP的方法,而不是使用Grails:Grails - 从Javascript方法调用控制器和呈现模板

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

瑞恩 - 你试图让一个Ajax调用一个Grails控制器? – JSager 2012-03-09 18:30:16

+0

是的 - 最后,我想做一个控制器方法调用,使用IdList从JS方法呈现模板。 – user82302124 2012-03-09 18:33:05

+0

好的给我一秒钟。 – JSager 2012-03-09 18:33:25

回答

6

所以,我觉得有几分你问这里两件事情。我会解决他们两个。首先,你如何从JavaScript中调用一个grails控制器的URL?在我的GSP页面(我在我的主要布局但不管),我喜欢做这个小动作:

<script> 
myapp.url.root = "<g:resource dir='' file='' />" + "/"; 
</script> 

无论它的部署这将会给你的应用程序的根部。然后,您可以在JavaScript中建立你的网址:

myurl = myapp.url.root + “路径/到/控制器”

然后使用URL做一个jQuery的AJAX调用。

然后确保您的控制器设置为响应您刚刚表达的任何URL模式。

第二个问题似乎是,“我如何发回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 
}); 
} 
+0

让我知道你是否希望我充实一点jQuery AJAX调用和控制器方法,或者如果你需要我告诉你GSP是什么样的。 – JSager 2012-03-09 18:43:44

+0

另外,我认为这不是最好的使用模式。我更喜欢向Grails应用程序请求* data *并使用jQuery构建我的标记,而不是向grails应用程序请求标记。 – JSager 2012-03-09 18:44:56

+0

让我试一试 - 这种方法很奇怪,因为我需要从列表中抽取所有选定的复选框,根据ID对这些域对象执行操作,然后进行渲染。不知道是否有其他方法,但我会试试这个 - 谢谢,并保持你的发布。 – user82302124 2012-03-09 18:51:45