【发布时间】:2014-04-02 04:33:39
【问题描述】:
我正在开发一个用户使用 twitter 登录的应用程序,在他们通过身份验证后,我们会立即处理和加载推文。这很容易需要 5-10 秒,所以我想要一个进度条,告诉他们我们已经加载了多少推文,还有多少要加载。 Hipmunk 的航班搜索就是我想要完成的一个很好的例子。
我试图通过在页面加载时启动两个 AJAX 请求来做到这一点。第一个运行与 twitter API 对话的控制器方法(长时间运行的进程),然后第二个每秒运行一个不同的控制器方法 - 理想情况下,我希望它轮询第一个请求的状态,存储在会话变量。
我在实践中看到的是第一个请求会阻塞,直到它完成,然后第二个请求开始运行。
1) 我做错了吗? AJAX 请求会阻塞吗?这是特定的轨道吗?如果是这样,我会喜欢任何解释原因的材料。
2) 如果我不能这样做,我应该使用不同的模式吗?我的想法是我可以将长时间运行的请求更改为一次只处理 200 条推文,并将状态更新到客户端,但这似乎会涉及在服务器和服务器之间来回传递大量信息客户端。
【问题讨论】:
-
通过将主要(twitter api 重)AJAX 调用包装在 setTimeout 中,我能够获得我想要的行为。
-
我发现这个关于“动作分块”的讨论很有帮助,因为我发现 redis/websockets 对我试图做的事情来说太过分了:groups.google.com/forum/#!topic/rubyonrails-talk/aU2nzCU3nLs
标签: jquery ruby-on-rails ajax progress-bar