2011-06-25 42 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