Jquery Grails在没有ajax的情况下动态更新模板视图
我试图用GSP模板通知用户任务的进度(显示在覆盖图中) 用户提交数据,控制器调用服务来完成任务。在此过程中,我有另一个服务,它计算完成百分比并将值返回给函数(如下)。根据任务的大小,第一个服务可以多次调用此计算服务Jquery Grails在没有ajax的情况下动态更新模板视图,jquery,ajax,templates,grails,gsp,Jquery,Ajax,Templates,Grails,Gsp,我试图用GSP模板通知用户任务的进度(显示在覆盖图中) 用户提交数据,控制器调用服务来完成任务。在此过程中,我有另一个服务,它计算完成百分比并将值返回给函数(如下)。根据任务的大小,第一个服务可以多次调用此计算服务 def progress(progressData) { def statusToView = progressData [statusToView:statusToView] } 我不认为我可以使用Ajax remoteFunction调用,因
def progress(progressData) {
def statusToView = progressData
[statusToView:statusToView]
}
我不认为我可以使用Ajax remoteFunction调用,因为我不会将属性“progressData”从GSP模板传递到控制器-这将导致缺少属性的错误
我想做的就是在更新时向用户显示百分比(statusToView)值,当进程完成启动任务的功能时,会重定向到一个页面,通知用户任务已完成
模板代码只是变量值:
${statusToView}
有两种可能的解决方案:
下一个问题是模板。在这种情况下,不能使用普通模板。我的建议是编写一个带有
开头…
的模板。在JavaScript回调中,您可以通过ID定位此元素,并用来自服务器的最新消息替换内容。我不认为我可以进行Ajax调用,因为我没有将属性传递给它需要“progressData”的函数。看起来WebSocket API是一个不错的选择,尽管我希望有一个快速解决方案!谢谢Aaron。您需要将进度数据作为属性放入服务器上的会话中。AJAX控制器将从那里获取它。您需要服务更新会话属性的方法。实现这一点最简单的方法是定义一个“监视器”接口,该接口接收更新消息,并定义一个可以访问当前用户HTTP会话的实现。在客户机上,您只需进行AJAX调用并将结果放入DOM中即可。再次感谢Aaron,我们使用的是Grails 2.4.3,因此目前无法使用WebSocket。我将尝试解决这个Ajax调用,我原以为我在Grails方面做得很好,但这项工作让我有点倒退。谢谢