ajax - Grails Controller 能否在操作完成之前动态返回对 View 的更新?

标签 ajax grails

现状

我正在执行一个外部应用程序(通过使用 Runtime.getRuntime().exec... example here )并且我正在监听应用程序将 stdout 写入的 Stream。 该部分按预期工作并且我得到了结果(在 grails Controller 中),逐行,因为它们可用,并且 - 当流没有更多内容时 - 我在页面上呈现结果.

另一方面是从 gsp 页面异步启动该应用程序。这也已经涵盖并进行了 remoteFunction 调用(对上述 Controller 方法),收集并返回结果,并将它们正确显示在页面上的指定区域。


但是,困扰我和我真正想要实现的是:

目标

在读取时显示从流中读取的行,而不是在整个流完成之后(就像现在完成的那样)。

这意味着(例如,类似于)为流读取循环中的每一行调用渲染:

while ((line = bri.readLine()) != null) {
  System.out.println(line);
  //render line here?
}

这能实现吗?

请解释:)

最佳答案

我认为没有标准的 Grails 方法可以实现您想要的行为。

g:remoteFunction它仍然是一个为您包装 AJAX 请求的标签。请求受请求响应模式的限制——您不能为一个请求获得多个响应。 您的操作代码不会自动修改。

您必须自己实现。

我会尝试以下方法:

  • 将单个 remoteFunction 调用拆分为多个 AJAX 请求
  • 第一个请求会初始化一个新线程,它会监听您的外部应用程序。
  • 此应用程序的结果必须存储在 session 范围,以便...
  • 来自客户端的以下定期请求可以轮询当前的执行状态。

关于ajax - Grails Controller 能否在操作完成之前动态返回对 View 的更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9634734/

相关文章:

grails - 在运行时获取application.properties属性?

mongodb - 动态域模型属性未加载

jquery - 将枚举值传递到jQuery网格过滤器

php - 如何使用正确的 "headers"回显 JSON 双重嵌套对象文字

javascript - Rails 4 - 如何在 js.erb 文件中使用来自 div_for 的动态 div id?

javascript - 如何在ajax中创建自定义选项

php - jQuery 和 PHP 的聊天功能不写入数据库

Grails spring security获取登录用户

grails - Groovy脚本-未完成Logback配置的行为

javascript - 在不重新加载页面的情况下更新 div - jquery/ajax setInterval