У меня есть простой веб-сайт (http://www.kousenit.com/twitterfollowervalue), который вычисляет количество, основанное на подписчиках Twitter. Поскольку API Twitter только возвращает последователей 100 за раз, полный процесс может включать в себя множество вызовов.Показать прогресс во время длинного звонка Ajax
На данный момент у меня есть вызов Ajax для метода, который запускает цикл Twitter. Метод выглядит (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
}
Это вызывается из контроллера под названием renderTTFV.groovy. Я называю контроллер через вызов Ajax, используя библиотеку прототипа:
На моей веб-странице, в разделе заголовка (JavaScript):
function displayTTFV() {
new Ajax.Updater('ttfv','renderTTFV.groovy', {});
}
и есть DIV в теле страницы, обновление, когда вызов завершен.
Все работает, но метод updateFollowers может занимать много времени. Есть ли способ вернуть значение прогресса? Например, я хотел бы обновить веб-страницу на каждой итерации. Я заранее знаю, сколько итераций будет. Я просто не могу понять способ обновления страницы в середине этого цикла.
Любые предложения будут оценены.
Это типичное приложение для долговечных HTTP-запросов или сервер-push. См. Http://en.wikipedia.org/wiki/Comet_%28programming%29 для более подробной информации. – John