Tôi có một trang web đơn giản (http://www.kousenit.com/twitterfollowervalue) tính toán số lượng dựa trên người theo dõi trên Twitter của một người. Vì API Twitter chỉ trả về người theo dõi 100 tại một thời điểm, một quá trình hoàn chỉnh có thể liên quan đến nhiều cuộc gọi.Hiển thị tiến trình trong một cuộc gọi Ajax dài
Hiện tại, tôi có một cuộc gọi Ajax đến một phương thức chạy vòng lặp Twitter. Phương thức trông giống như (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
}
Điều này được gọi từ bộ điều khiển gọi là renderTTFV.groovy. Tôi gọi bộ điều khiển thông qua một cuộc gọi Ajax sử dụng thư viện mẫu:
Trên trang web của tôi, trong phần tiêu đề (JavaScript):
function displayTTFV() {
new Ajax.Updater('ttfv','renderTTFV.groovy', {});
}
và có một div trong cơ thể của trang đó cập nhật khi cuộc gọi hoàn tất.
Mọi thứ đều hoạt động, nhưng phương pháp updateFollowers có thể mất một lượng thời gian hợp lý. Có cách nào tôi có thể trả về giá trị tiến bộ không? Ví dụ: tôi muốn cập nhật trang web trên mọi lần lặp lại. Tôi biết trước bao nhiêu lần lặp lại sẽ có. Tôi chỉ không thể tìm ra cách để cập nhật trang ở giữa vòng lặp đó.
Mọi đề xuất sẽ được đánh giá cao.
Đây là một ứng dụng điển hình cho các yêu cầu HTTP tồn tại lâu dài hoặc đẩy máy chủ. Xem http://en.wikipedia.org/wiki/Comet_%28programming%29 để biết thêm chi tiết. – John