多次回复一个请求?

时间:2012-11-20 12:12:45

标签: ruby-on-rails ajax

我的rails应用程序中的一个位置需要从外部服务器加载大量响应,目前看起来像这样:

  1. 用户向服务器发出AJAX请求。显示“正在加载数据...”。
  2. 5-30秒后,rails app发送响应(假设数据尚未缓存)。
  3. 如果我能在长时间等待期间通知用户并通知他们请求的进度,那将会好得多。如:

    1. 用户提出请求(如前所述)。
    2. 显示消息“正在检索ABC”
    3. 显示消息“正在检索XYZ”
    4. 显示消息“处理数据”
    5. 正常回应。
    6. 我怎么能这样做?我认为不可能向一个请求发回多个JavaScript响应,但不知道这样做的正确方法是什么!

1 个答案:

答案 0 :(得分:3)

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

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

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

因此,我将每个请求分配给请求ID,然后为这些请求及其状态设置数据库表(可能只有id:integer和status:string)

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

同时长时间运行的请求会更新Status表,其中包含ID,以及当前处理该请求的位置。