Grails动态更新模板视图而不使用ajax

时间:2015-03-19 12:45:13

标签: jquery ajax templates grails gsp

我试图告知用户使用GSP模板执行任务的进度(这是以叠加方式显示)

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

    def progress(progressData) {

    def statusToView = progressData

    [statusToView:statusToView]
    }

我不认为我可以使用Ajax remoteFunction调用,因为我不会通过该属性' progressData'从GSP模板到控制器 - 这会产生缺少属性的错误。

我想要做的就是在用户更新后向用户显示百分比(statusToView)值,当进程完成后,从任务开始的功能会重定向到一个页面,通知用户作业已完成

模板代码只是变量值:

     ${statusToView}

1 个答案:

答案 0 :(得分:0)

有两种可能的解决方案:

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

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