【问题标题】:Grails dynamically update template view without ajaxGrails 在没有 ajax 的情况下动态更新模板视图
【发布时间】:2015-05-22 14:08:24
【问题描述】:

我正在尝试使用 GSP 模板通知用户任务的进度(这显示在叠加层中)

用户提交他们的数据,控制器调用服务来完成任务。在此过程中,我有另一个服务计算完成百分比并将值返回给函数(如下)。根据任务的大小,第一个服务可以多次调用此计算服务。

    def progress(progressData) {

    def statusToView = progressData

    [statusToView:statusToView]
    }

我认为我不能使用 Ajax remoteFunction 调用,因为我不会将属性“progressData”从 GSP 模板传递给控制器​​ - 这会导致缺少属性的错误。

我想要做的就是在更新时向用户显示百分比 (statusToView) 值,当进程完成时,启动任务的功能重定向到通知用户工作已完成的页面。

模板代码就是变量值:

     ${statusToView}

【问题讨论】:

    标签: jquery ajax templates grails gsp


    【解决方案1】:

    有两种可能的解决方案:

    1. 您可以启动计时器并对服务器进行 AJAX 调用以获取最新更新。
    2. 您可以创建WebSocket。 WebSocket 是一个双向 API,浏览器和服务器可以随时发送消息。消息到达时会通知两端的回调。

    WebSocket API 将允许您的服务在更新发生时将更新推送到浏览器。

    下一个问题是模板。在这种情况下,您不能使用普通模板。我的建议是用<div id="updates">Starting...</div> 编写一个模板。在您的 JavaScript 回调中,您可以通过 ID 定位此元素并将内容替换为来自服务器的最新消息。

    【讨论】:

    • 我不认为我可以进行 Ajax 调用,因为我没有将属性传递给它期望“progressData”的函数。看起来 WebSocket API 是可行的方法,尽管我希望能快速修复!谢谢亚伦。
    • 您需要将进度数据作为属性放入服务器上的会话中。然后 AJAX 控制器将从那里获取它。您需要一种方法让服务更新会话属性。最简单的方法是定义一个接受更新消息的“监视器”接口和一个可以访问当前用户的 HTTP 会话的实现。在客户端,您只需要进行 AJAX 调用并将结果放入 DOM。
    • 再次感谢 Aaron,我们在 Grails 2.4.3 上,所以现在不能使用 websockets。我会试着弄清楚这个 Ajax 调用,我认为我在 Grails 方面做得很好,但这项工作让我有点退缩。谢谢
    猜你喜欢
    • 2012-01-22
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    相关资源
    最近更新 更多