2009-12-03 239 views
13

我的Django應用程序顯示來自數據庫的數據。該數據在沒有用戶干預的情況下改變,即在幕後。無論什麼時候改變,我都希望網頁在沒有完整頁面重新加載的情況下更新已更改的部分。如何更新沒有頁面重新加載的Django頁面?

顯然AJAX彈簧想到。當最初加載頁面(或者手動加載,稍後完全重新加載)時,呈現的模板加載運行window.onload = update(「all」)的JavaScript,update(...)反過來觸發一系列XMLHTTPRequests它再次返回轉換爲相應部分的HTML片段的數據。一切正常。在初始頁面加載。

現在我發現自己在保存新對象到數據庫的Python函數。

我如何告訴瀏覽器運行update()?

我需要以某種方式手動發出映射到這反過來又使得它包含的JavaScript代碼運行update(...)模板的視圖的URL的請求???天啊!

我覺得我沒有按照通常的做法。 也許我只是站在這個問題的前面。

任何人都可以幫助我嗎?

回答

6

兩種方法的文章:

  1. 只需更新數據庫,並等待下一個AJAX查詢。這意味着它應該定期執行查詢,您必須在即時性和服務器負載之間進行權衡。如果你可以做一個便宜的查詢來驗證是否有更新,它會有所幫助。可能會使該檢查僅依靠memcached而不是去數據庫

    • 使用comet。簡而言之:客戶端會執行一個AJAX查詢來請求更新。服務器看到沒有更新,所以它不回答。相反,連接會長時間保持打開狀態。最終無論是更新還是服務器終於回答,或者客戶端超時並終止連接。在這種情況下,客戶端應立即重新發出查詢以繼續等待更新。
+0

感謝你們兩位的幫助! :-) 我馬上去彗星,看看我能得到它的工作,否則我將不得不定期輪詢更新。 – ssc 2009-12-03 02:00:04

+0

這兩個答案都非常好,只是將任意一個作爲接受的答案。再次感謝! :-) – ssc 2009-12-09 20:09:34

7

你有兩個選擇

  1. 在使用的setTimeout()的瀏覽器調查
  2. 查找到彗星 - 這是從服務器將數據推到瀏覽器的技術。

這裏有Comet in Django