2011-06-30 52 views
5

我正在使用一個簡單的PHP應用程序,使用CouchDB和PHP-on-Couch來訪問一些視圖,它的工作很好。我的下一步是引入Ajax來使用數據庫中的數據更新前端。CouchDB實時Ajax推送更新

我知道你可以使用_changes通知很容易地檢測到對數據庫所做的任何更改。因此,它的index.html監視更改(通過長輪詢),它調用loadView.php來更新頁面內容。

首先,我希望上面的是繞了正確的方法...

其次,瀏覽到index.html的時候,頁面似乎從來沒有完全負載(頁面加載欄從來沒有完成)。當更改完成後,Firebug會按預期顯示結果,但不會進行任何後續更改。在這個時候,頁面似乎已經停止了無限的加載。

到目前爲止,我使用jQuery我讓Ajax調用...

$.getJSON('http://localhost:5984/db?callback=?', function(db) { 
    console.log(db.update_seq); 
    $.getJSON('http://localhost:5984/db/_changes?since='+db.update_seq+'&feed=continuous&callback=?', function(changes) { 
     console.log(changes); 
    }); 
}); 

任何想法可能在這裏發生了什麼?

+2

關於**首先**,你是對的! – JasonSmith

+0

哈哈,真棒!總是善於把它傳遞給別人比我更清楚的鼻子! – crawf

回答

5

我相信答案很簡單。

A longpoll查詢是AJAX,保證只響應一次,如獲取HTML或圖像。在等待變更時可能需要一些時間來回應;或者如果已經發生變化,它可能會立即回覆。

A 連續查詢是COMET。它永遠不會「完成」HTTP回覆,它會保持連接永遠打開(除了錯誤,崩潰等)。每次發生變化時,沙發都會將它發送給您。

換句話說,請嘗試將feed=longpoll更改爲feed=continuous並查看是否可以解決此問題。

對於背景,我建議在CouchDB權威指南change notifications,當然還有優秀的Couchbase單一服務器changes API documentation

+1

這是非常有意義的,我應該比這更清楚! – crawf