2011-10-28 30 views
1

我在web2py應用程序中創建了搜索欄功能,從數據庫中獲取結果。但是,如果數據庫的內容在頁面啓動時發生更改,則需要重新加載以反映不同的內容。 我的問題是,我可以通過ajax或json或somesuch將數據庫的內容讀入javascript變量而無需重新加載頁面。如何從服務器獲取更新的數據而無需重新加載web2py中的頁面

目前我使用這樣的控制器:

def testDB(): 
     valA=[] 
     valB=[] 
     valC=[] 
     for x in db().select(db.products.ALL): 
      valA.append(x.prdA) 
      valB.append(x.prdB) 
      valC.append(x.prdC) 
     return dict(VA=valA, VB=valB, VC=valC) 

隨着獲取數據,像這樣一個觀點:

{{valA=VA}} {{valB=VB}} {{valC=VC}} 
A = {{=XML(response.json(valA))}} 
B = {{=XML(response.json(valB))}} 
C = {{=XML(response.json(valC))}} 

使用的變量。這可以很好地使用加載頁面時的數據,但不會刷新以適應對數據庫的更改。爲了獲取新的數據,我想:

function loadFromDB(){ 
jQuery.ajax({ 
type:"POST", 
    url:'testDB', 
    success: function(msg){  
    {{ 
    valA=VA 
    valB=VB 
    valC=VC 
    }} 
    A = {{=XML(response.json(valA))}} 
    B = {{=XML(response.json(valB))}} 
    C = {{=XML(response.json(valC))}} 
    }, 
    error: function(errormessage){alert("Error in retrieving from database");} 
});} 

但這似乎使用舊的VA/B/C的變量,因爲它沒有反映到數據庫中的任何改變。我嘗試了其他一些方法,例如A = VA,在{{}} breackets之外,但尚未找到工作的方法。我應該如何檢索python函數返回到JavaScript的數據?

感謝

回答

0

假設你loadFromDB功能在testDB視圖定義,那麼在loadFromDB{{ }}內一切都將在何時testDB被調用時創建原始頁面的時間填寫。 web2py模板代碼不會在客戶端使用Javascript執行 - 它用於在服務器端生成最初的Javascript(當頁面最初加載時)。

如果你想讓loadFromDb對Ajax調用返回的數據做些什麼,你必須在Javascript中編寫邏輯。注意,jQuery.ajax success函數將返回的數據作爲第一個參數,所以像:

jQuery.ajax({ 
    [snip] 
    success: function(data) { 
     [JS code to do something with the returned data] 
    }, 
    etc. 
+0

能給我如何提醒返回的數據到屏幕的例子嗎? – James

+0

'$('#target-element')。html([some-of-your-data])''。 – Anthony

+0

只是無法弄清楚如何檢索服務器端的python變量我想要的客戶端JS之一。不過,感謝您的幫助。 – James

相關問題