簡體   English   中英

在長時間的Ajax調用期間顯示進度

[英]Show progress during a long Ajax call

我有一個簡單的網站( 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
}

這是從一個名為renderTTFV.groovy的控制器調用的。 我使用原型庫通過Ajax調用來調用控制器:

在我的網頁上,在標題部分(JavaScript)中:

function displayTTFV() {
    new Ajax.Updater('ttfv','renderTTFV.groovy', {});
}

並且在呼叫完成時,頁面正文中有一個div更新。

一切正常,但updateFollowers方法可能需要相當長的時間。 有什么方法可以返回進度值嗎? 例如,我想在每次迭代時更新網頁。 我提前知道會有多少次迭代。 我只是無法弄清楚在該循環中間更新頁面的方法。

任何建議,將不勝感激。

對於或多或少准確的進度報告,您有兩種選擇:

  • 讓服務器告訴你它的進展
  • 讓客戶端(瀏覽器)向服務器詢問其進度

保持服務器告訴您進度將很容易實現。 您可以,而不是調用Ajax.Updater ,創建一個iframe元素並修改服務器,為每次迭代,轉儲帶有一些javascript的響應,以觸發顯示瀏覽器的進度,並刷新該響應。 像這樣,瀏覽器將執行javascript並一直等待響應完成,因此用戶將看到進度指示器向上移動直到完成所有操作。

服務器可以使用其他方法來告訴您操作的進度。 你可以Bing / Google關於Comet服務器

至於讓瀏覽器定期詢問操作的進度,你可以在瀏覽器每次迭代時返回一些令牌,瀏覽器會檢查它是否是最終結果,或者是否應該將它傳遞給服務器以便服務器繼續按下twitter來獲取下一個結果集,或以某種方式保持服務器中的狀態(如果你有會話狀態支持,可能會這樣做),在每次迭代中更新並​​且可以在單獨的請求中輪詢。

我希望這些建議有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM