【问题标题】:JSON data for jQuery dataTable in web2pyweb2py 中 jQuery dataTable 的 JSON 数据
【发布时间】:2011-09-22 11:58:06
【问题描述】:

我正在尝试通过 AJAX 将 json 数据从 web2py 控制器加载到 jQuery dataTable。
但只呈现空白数据表(具有所需的格式、搜索框等)
有人可以吗?在我的代码中指出我有错误的地方。
不显示数据(由“get_data”方法返回)。
我已确保已填充数据库表。

控制器

def show_data():
    return dict()

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

出于测试目的,我以单独的方法返回了 response.json(custdata) 并在“jsonlint.com”上验证了相同的内容。 它是有效的 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
    } );
} );

最后,为一个 class="smarttable" 的表格定义了 html 表格标签

【问题讨论】:

    标签: jquery-plugins datatable web2py


    【解决方案1】:

    您必须在为 return 提供的“字典”中具有“键”值。

    iTotalRecords、iTotalDisplayRecords、sEcho 和 aaData。你可以在http://datatables.net/usage/server-side找到解释

    【讨论】:

      【解决方案2】:

      您的 get_data 函数应该返回一个字典,如下所示:

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

      在 web2py 中,仅当控制器操作返回字典时才会调用视图 - 否则,控制器输出会按原样返回到客户端(并且按原样,custdata 尚未转换为 JSON)。

      当您调用 URL /MIS/get_data.json 时,.json 扩展名告诉 web2py 查找 /views/MIS/get_data.json 视图文件以用于呈现 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 DataTables 插件要求 JSON 包含一些特殊参数,因此您必须在返回 JSON 之前添加这些参数。为了让事情变得更简单,您可以考虑使用PowerTable(DataTables 的 web2py 插件),或 web2py 的 plugin_wiki 中包含的 jqGrid 小部件(该小部件可用于任何网页,而不仅仅是 wiki 页面)。

      【讨论】:

      • 我已经尝试在“控制器”中返回 dict(data=custdata)。然后在“视图”中,尝试以以下方式访问该数据:--“sAjaxSource”:“{{=URL('MIS','get_data')}}”,但没有成功。如果使用response.json(custdata),直接在浏览器中访问,会在浏览器页面写入json。但如果从“sAjaxSource”访问,则不会呈现任何数据。我认为我调用“get_data”方法的方式有问题。你能请吗?帮助找出错误?....谢谢。
      • MIS 是您的应用名称还是控制器名称? URL() 将假定它是控制器名称并将 URL 生成为 /appname/MIS/get_data - 它应该是什么,或者应该是 /MIS/controller/get_data (在这种情况下,您需要替换 ' MIS' 与您调用 URL()) 中的控制器名称。
      • 我有这样的结构。 a='MyWheels',c='MIS',f='get_data'。所以, {{=URL('MIS','get_data')}} 应该可以工作。但它不会将数据返回到 dataTable。
      • 看起来 DataTables 要求您的 JSON 包含一些特殊参数(请参阅 datatables.net/usage/server-side),因此您需要在返回之前添加这些参数并根据需要格式化 JSON。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-27
      • 2019-05-06
      • 2013-07-24
      • 2013-10-16
      • 1970-01-01
      • 2021-01-17
      相关资源
      最近更新 更多