【问题标题】:Grails - Calling controller and rendering template from Javascript methodGrails - 从 Javascript 方法调用控制器和渲染模板
【发布时间】:2012-03-27 04:47:35
【问题描述】:

如何将调用从 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]")}

【问题讨论】:

  • Ryan - 您是否尝试对 grails 控制器进行 Ajax 调用?
  • 是的 - 最后,我想做一个控制器方法调用,使用 IdList 从 JS 方法呈现模板。

标签: javascript jquery grails controller


【解决方案1】:

所以,我觉得你在这里问了两件事。我要对付他们两个。首先,如何获取正确的 URL 以从 JavaScript 调用 grails 控制器?在我的 GSP 页面中(我在我的主布局中这样做),我喜欢做这个小技巧:

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

这将为您提供应用程序的基本根目录,无论它部署在哪里。然后,您可以在 JavaScript 中构建您的 URL:

myurl = myapp.url.root + "path/to/controller"

然后使用该 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 
}); 
}

【讨论】:

  • 如果您希望我进一步充实 jQuery AJAX 调用和控制器方法,或者您需要我向您展示 GSP 是什么样的,请告诉我。
  • 另外,我认为这不是最好的模式。我更喜欢向 Grails 应用程序询问 data 并使用 jQuery 构建我的标记,而不是向 Grails 应用程序询问标记。
  • 让我试试这个 - 这种方法很奇怪,因为我需要从列表中拉出所有选中的复选框,根据 ID 对这些域对象执行操作,然后渲染。不确定是否有其他解决方法,但我会尝试一下 - 谢谢并随时通知您。
  • 我仍然认为您可以通过 RESTful 服务潜在地操作这些对象,并在 RESTful 响应中返回与这些域对象相关的数据,然后根据数据操作 DOM。如果您愿意,我可以通过电子邮件向您发送一个示例,说明我的意思。
  • 我没有看到您的电子邮件 - 但我可以在我的 JS 代码中执行此操作吗(请参阅我最初的问题)
猜你喜欢
  • 2010-11-16
  • 1970-01-01
  • 2014-05-01
  • 2011-03-10
  • 1970-01-01
  • 1970-01-01
  • 2010-11-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多