Ho un semplice sito Web (http://www.kousenit.com/twitterfollowervalue) che calcola una quantità in base ai follower di Twitter di una persona. Poiché l'API di Twitter restituisce solo follower 100 alla volta, un processo completo può coinvolgere molte chiamate.Mostra i progressi durante una lunga chiamata Ajax
Al momento, ho una chiamata Ajax a un metodo che esegue il ciclo di Twitter. Il metodo sembra (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
}
Questo viene richiamato da un controller chiamato renderTTFV.groovy. Chiamo il controller tramite una chiamata AJAX utilizzando la libreria del prototipo:
sulla mia pagina web, nella sezione di intestazione (JavaScript):
function displayTTFV() {
new Ajax.Updater('ttfv','renderTTFV.groovy', {});
}
e c'è un div nel corpo della pagina che si aggiorna quando la chiamata è completa.
Tutto funziona, ma il metodo updateFollowers può richiedere una notevole quantità di tempo. C'è un modo per restituire un valore di avanzamento? Ad esempio, vorrei aggiornare la pagina Web ad ogni iterazione. So in anticipo quante iterazioni ci saranno. Non riesco a capire un modo per aggiornare la pagina nel mezzo di quel ciclo.
Qualsiasi suggerimento sarebbe apprezzato.
Questa è una tipica applicazione per richieste HTTP di lunga durata o server-push. Vedi http://en.wikipedia.org/wiki/Comet_%28programming%29 per maggiori dettagli. – John