我的rails应用程序中的一个位置需要从外部服务器加载大量响应,目前看起来像这样:
如果我能在长时间等待期间通知用户并通知他们请求的进度,那将会好得多。如:
我怎么能这样做?我认为不可能向一个请求发回多个JavaScript响应,但不知道这样做的正确方法是什么!
答案 0 :(得分:3)
这很棘手,但Rails支持流式传输请求的概念。 但是你可能需要在你的项目中做很多工作来完成这项工作。
Tenderlove(Aaron Patterson)发布了a intro关于Streaming如何在Rails中工作的信息,我相信有关于这个主题的Railscast。
可能更简单的解决方案是将其拆分为多个请求。 所以主要请求(假设它是一个ajax请求)需要永远完成。 同时,您在不同的ajax请求上轮询状态,主操作使用它的进程更新数据库,以便其他请求可以检索该状态并发回相应的响应(当前主要请求在此过程中)
因此,我将每个请求分配给请求ID,然后为这些请求及其状态设置数据库表(可能只有id:integer和status:string)
您在客户端上分配请求ID(使用一些随机数据来创建哈希或其他内容)并使用该Id启动长请求。 然后,客户端使用相同的id轮询另一个端点以获取状态。
同时长时间运行的请求会更新Status表,其中包含ID,以及当前处理该请求的位置。