Jquery Grails在没有ajax的情况下动态更新模板视图

Jquery Grails在没有ajax的情况下动态更新模板视图,jquery,ajax,templates,grails,gsp,Jquery,Ajax,Templates,Grails,Gsp,我试图用GSP模板通知用户任务的进度(显示在覆盖图中) 用户提交数据,控制器调用服务来完成任务。在此过程中,我有另一个服务,它计算完成百分比并将值返回给函数(如下)。根据任务的大小,第一个服务可以多次调用此计算服务 def progress(progressData) { def statusToView = progressData [statusToView:statusToView] } 我不认为我可以使用Ajax remoteFunction调用,因

我试图用GSP模板通知用户任务的进度(显示在覆盖图中)

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

    def progress(progressData) {

    def statusToView = progressData

    [statusToView:statusToView]
    }
我不认为我可以使用Ajax remoteFunction调用,因为我不会将属性“progressData”从GSP模板传递到控制器-这将导致缺少属性的错误

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

模板代码只是变量值:

     ${statusToView}

有两种可能的解决方案:

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


    下一个问题是模板。在这种情况下,不能使用普通模板。我的建议是编写一个带有
    开头…
    的模板。在JavaScript回调中,您可以通过ID定位此元素,并用来自服务器的最新消息替换内容。

    我不认为我可以进行Ajax调用,因为我没有将属性传递给它需要“progressData”的函数。看起来WebSocket API是一个不错的选择,尽管我希望有一个快速解决方案!谢谢Aaron。您需要将进度数据作为属性放入服务器上的会话中。AJAX控制器将从那里获取它。您需要服务更新会话属性的方法。实现这一点最简单的方法是定义一个“监视器”接口,该接口接收更新消息,并定义一个可以访问当前用户HTTP会话的实现。在客户机上,您只需进行AJAX调用并将结果放入DOM中即可。再次感谢Aaron,我们使用的是Grails 2.4.3,因此目前无法使用WebSocket。我将尝试解决这个Ajax调用,我原以为我在Grails方面做得很好,但这项工作让我有点倒退。谢谢