kou*_*sen 5 javascript ajax groovy prototypejs progress-bar
我有一个简单的网站(http://www.kousenit.com/twitterfollowervalue),根据一个人的Twitter粉丝计算数量.由于Twitter API一次仅返回关注者100,因此完整的过程可能涉及大量呼叫.
目前,我对运行Twitter循环的方法进行了Ajax调用.该方法看起来像(Groovy):
def updateFollowers() {
def slurper = new XmlSlurper()
followers = []
def next = -1
while (next) {
def url = "http://api.twitter.com/1/statuses/followers.xml?id=$id&cursor=$next"
def response = slurper.parse(url)
response.users.user.each { u ->
followers << new TwitterUser(... process data ...)
}
next = response.next_cursor.toBigInteger()
}
return followers
}
Run Code Online (Sandbox Code Playgroud)
这是从一个名为renderTTFV.groovy的控制器调用的.我使用原型库通过Ajax调用来调用控制器:
在我的网页上,在标题部分(JavaScript)中:
function displayTTFV() {
new Ajax.Updater('ttfv','renderTTFV.groovy', {});
}
Run Code Online (Sandbox Code Playgroud)
并且在呼叫完成时,页面正文中有一个div更新.
一切正常,但updateFollowers方法可能需要相当长的时间.有什么方法可以返回进度值吗?例如,我想在每次迭代时更新网页.我提前知道会有多少次迭代.我只是无法弄清楚在该循环中间更新页面的方法.
任何建议,将不胜感激.
对于或多或少准确的进度报告,您有两种选择:
让服务器告诉您进度将很容易实现。您可以Ajax.Updater创建一个iframe元素并修改服务器,以便对于每次迭代,使用一些 javascript 转储响应以触发在浏览器上显示进度,并刷新该响应,而不是调用 。这样,浏览器将执行 JavaScript 并继续等待,直到响应完成,因此用户将看到进度指示器向上移动,直到一切完成。
服务器还可以使用其他方法来告诉您操作的进度。您可以通过 Bing/Google 了解Comet 服务器。
至于让浏览器定期询问操作的进度,您可以在每次迭代时向浏览器返回一些令牌,浏览器将检查它是否是最终结果,或者是否应该将其传递给服务器,以便服务器不断点击 twitter 获取下一个结果集,或者以某种方式在服务器中保留一个状态(如果您有会话状态支持,这可能会做到这一点),该状态在每次迭代中更新,并且可以根据单独的请求进行轮询。
我希望建议有所帮助。
| 归档时间: |
|
| 查看次数: |
3004 次 |
| 最近记录: |