2011-06-25 43 views
0

我試圖從j2D jQuery數據從j2ta控制器通過AJAX加載jQuery數據。
但是僅顯示空白dataTable(具有期望的格式,搜索框等)
是否可以有人pl。在我的代碼中指出我犯錯的地方。
數據不顯示(由「get_data」方法返回)。
我已經確保數據庫表已填充。

控制器JSON數據jQuery dataTable在web2py

def show_data(): 
    return dict() 

def get_data(): 
    custdata = db.executesql(qry, as_dict=True) 
    return custdata 

出於測試目的,我回到在&驗證相同的 「jsonlint.com」 的單獨方法response.json(custdata)。 這是有效的json。

視圖(show_data.html)


{{extend 'layout.html'}} 
$(document).ready(function() { 
    var oTable = $('.smarttable').dataTable({ 
     "sScrollY": "200px", 
     "sAjaxSource": "{{=URL('MIS','get_data.json')}}", 
     "sDom": "frtiS", 
     "bDeferRender": true 
    }); 
}); 

最後,HTML表格標記使用類表= 「smarttable」 定義

回答

1

你GET_DATA函數返回一個字典,像這樣的:

def get_data(): 
    custdata = db.executesql(qry, as_dict=True) 
    return dict(data=custdata) 

在web2py中,僅當控制器操作返回字典時調用視圖 - 否則,控制器輸出i s直接返回給客戶端(因爲custdata尚未轉換爲JSON)。

當您調用URL /MIS/get_data.json時,.json擴展名會告訴web2py查找用於呈現JSON的/views/MIS/get_data.json視圖文件。如果沒有找到該視圖文件,它將嘗試使用/views/generic.json,儘管它只會對本地請求使用generic.json,除非您通過指定response.generic_patterns=['json']來覆蓋該視圖文件。

作爲替代使用視圖渲染JSON,你也可以這樣做:

def get_data(): 
    custdata = db.executesql(qry, as_dict=True) 
    return response.json(custdata) 

編輯:jQuery的數據表插件需要的JSON,包括一些特殊的參數,所以你必須要加那些在返回JSON之前。爲了簡化操作,您可以考慮使用PowerTable(DataTable的web2py插件),或者web2py的plugin_wiki附帶的jqGrid小部件(該小部件可以用於任何網頁,而不僅僅是維基頁面)。

+0

我已經試圖在「控制器」返回dict(data = custdata)。然後在「視圖」中,嘗試訪問該數據爲: - 「sAjaxSource」:「{{= URL('MIS','get_data')}}」,但沒有成功。如果使用response.json(custdata),並直接在瀏覽器中訪問,它會在瀏覽器頁面上寫入json。但是,如果從「sAjaxSource」訪問,則不會呈現數據。我認爲我調用「get_data」方法的方式有問題。你可以套住嗎?幫助找到錯誤?....謝謝。 – Vineet

+0

MIS是您的應用程序名稱還是控制器名稱?URL()將假設它是控制器名稱,並生成URL爲/ appname/MIS/get_data - 它應該是什麼,或者它應該是/ MIS/controller/get_data(在這種情況下,您需要替換' MIS「,並在調用URL()時使用控制器名稱)。 – Anthony

+0

我有這樣的結構。 a ='MyWheels',c ='MIS',f ='get_data'。所以,{{= URL('MIS','get_data')}}應該可以工作。但它不會將數據返回到dataTable中。 – Vineet