0

我的 Rails 应用程序中的一个地方需要从外部服务器加载许多响应,目前看起来像这样:

  1. 用户向服务器发出 AJAX 请求。显示“正在加载数据...”。
  2. 5-30 秒后,rails 应用程序发送响应(假设数据尚未缓存)。

如果我能在漫长的等待期间让用户了解请求的进度,那会更好。如:

  1. 用户提出请求(如前所述)。
  2. 显示消息“正在检索 ABC”
  3. 显示消息“正在检索 XYZ”
  4. 显示消息“处理数据”
  5. 正常响应。

我该怎么做呢?我不认为向一个请求发送多个 JavaScript 响应是可能的,但不知道这样做的正确方法是什么!

4

1 回答 1

3

这很棘手,但 Rails 支持流式传输请求的概念。但是你可能需要在你的项目中做很多工作才能完成这项工作。

Tenderlove (Aaron Patterson) 发布了一篇关于 Streaming 如何在 Rails 中工作的介绍,我相信有一个关于这个主题的 Railscast。

可能更简单的解决方案是将其拆分为多个请求。所以主请求(假设它是一个 ajax 请求)需要永远完成。同时,您轮询不同 ajax 请求的状态,主操作使用其进程更新数据库,以便其他请求可以检索该状态并发送回适当的响应(当前主请求在该进程中的位置)

所以我会为每个请求分配一个请求 id 之类的东西,然后为这些请求及其状态创建一个数据库表(可以像只有 id:integer 和 status:string 一样简单)

您在客户端上分配请求 ID(使用一些随机数据来创建哈希或其他内容)并使用该 ID 开始长请求。客户端然后轮询具有相同 id 的另一个端点以获取状态。

与此同时,长时间运行的请求会使用它给出的 id 以及它当前正在处理该请求的位置更新状态表。

于 2012-11-20T12:22:12.467 回答