Tengo un sitio web simple (http://www.kousenit.com/twitterfollowervalue) que calcula una cantidad basada en los seguidores de Twitter de una persona. Dado que la API de Twitter solo devuelve 100 seguidores a la vez, un proceso completo puede implicar muchas llamadas.Mostrar progreso durante una larga llamada Ajax
Por el momento, tengo una llamada de Ajax a un método que ejecuta el ciclo de Twitter. El método se parece (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
}
Esta se invoca desde un controlador llamado renderTTFV.groovy. Me llamo el controlador a través de una llamada Ajax usando la biblioteca de prototipo:
En mi página web, en la sección de encabezado (JavaScript):
function displayTTFV() {
new Ajax.Updater('ttfv','renderTTFV.groovy', {});
}
y hay un div en el cuerpo de la página que se actualiza cuando la llamada está completa.
Todo funciona, pero el método updateFollowers puede llevar bastante tiempo. ¿Hay alguna forma en que pueda devolver un valor de progreso? Por ejemplo, me gustaría actualizar la página web en cada iteración. Sé de antemano cuántas iteraciones habrá. Simplemente no puedo encontrar una manera de actualizar la página en el medio de ese ciclo.
Cualquier sugerencia sería apreciada.
Esta es una aplicación típica para solicitudes HTTP de larga duración, o server-push. Consulte http://en.wikipedia.org/wiki/Comet_%28programming%29 para obtener más detalles. – John