2012-04-24 73 views
0

使用ajax調用更改數據時,在數據庫和網頁之間實現同步的最佳方式是什麼?舉個例子,假設我有一個用於添加註釋的表單,我希望它可以異步工作。因此,我創建了一個將該表單提交給數據庫的JS代碼。向用戶顯示這些新數據而不必刷新頁面的最佳做法是什麼?此刻,我能想到的3個解決這個問題:在將要處理,我們收到來自服務器的確定mesage後,這個數據插入到頁面上的相應元素的回調函數使用數據庫同步ajax網頁

  1. 認沽JS代碼。

  2. 作爲服務器的響應,發送所有應顯示在元素中的數據,然後使用JS插入所有內容。

  3. 1和2之間的混合類型,作爲服務器的響應,只發送處理後的新數據片段並將其插入到適當的位置。

我不喜歡1中的代碼重複性,即我們必須實現兩次處理邏輯。我也不喜歡2.因爲從服務器發送數據的開銷。至於3.我最喜歡這種方法,但仍有一些來回發送數據的開銷。我知道這些開銷在大多數情況下可能不會影響系統的功能,但我想知道是否還有其他解決方案來解決這個問題,以及確保數據同步的最佳做法是什麼?

回答

1

您可能要考慮使用模型和集合,例如backboneJS這樣做。這是一種「數據庫的本地副本」。首先,您的模型只提取幾條記錄進行顯示,如待辦事項列表中的前10條。該模型具有CRUD方法,您可以在其中操作數據。

然後,對於您的界面,您有單獨的視圖代碼。這些視圖與模型相連,可以執行CRUD以及聽取模型數據更改,這些更改可以來自當前模塊界面或界面的另一部分。如果頁面的一部分更改了數據,則掛鉤到相同模型的其他部分會得到通知。模型可以是任何東西,它可能代表數據庫中的一個或多個表的組合,類似地,該模型將具有AJAX同步能力。每一個修改過的數據都會通過AJAX調用反映到服務器上。當該呼叫完成時,通知所有掛鉤的接口進行相應的更新。由於數據包含在模型中,您只需將更改發送到服務器並聆聽成功。對於來自服務器的實時數據,您可以在模型中創建一些輪詢功能來更新其數據。如果有變化,通知所有掛鉤的接口。

+0

這看起來很有趣,非常感謝。我一直在努力的其中一個項目的複雜性在增加很多,肯定會給這個機會來解決js中的大混亂。 – Laky 2012-04-25 15:29:54