【问题标题】:DataTables rows are fine but are not initialized?DataTables 行很好但没有初始化?
【发布时间】:2014-09-17 07:59:27
【问题描述】:

我已经使用 DataTables 建立了我的网站。
我从我的 java servlet 后端通过它的 ajax 服务获取我的数据 - 这工作正常,DOM 一切看起来都很好。但即使我的所有数据都正常工作,但似乎所有 DataTables 功能都失败了。

(所有字段都有效,我故意将 null 返回到空字段)
我的 jQuery DataTables 设置如下所示:

function getUserTable() {
  var table = $('#example').DataTable({
    "destroy": true,
    "processing": true,
    "serverSide": true,
    "ajax": {
        "dataType": 'json',
        "url": "action=getAllUsers",
        "type": "POST",
        "dataSrc": "allUsers"
    },
    "columns": [
        {"data": "id"},
        {"data": "username"},
        {"data": "firstName"},
        {"data": "lastName"},
        {"data": "loggedIn"},
        {"data": "email"}
    ]
  });
}

所以我将 serverSide 设置为 true,因为我的后端在同一台服务器上 - 我似乎找不到任何教程,但是当它设置为 serverside 时,内置搜索功能似乎不起作用?
另外为什么看起来表格还没有初始化?它显示了太多页面并显示“显示 0 到 0 个条目,共 0 个条目”。
我返回的 json 数据如下所示:

allUsers: [{email:null, firstName:null, id:1, lastName:null, loggedIn:false, username:mag},…]

HTML表格结构:

<table id="example" class="display" cellspacing="0" width="100%">
                <thead>
                    <tr>
                        <th>Id</th>
                        <th>Brugernavn</th>
                        <th>Navn</th>
                        <th>Efternavn</th>
                        <th>Logged</th>
                        <th>Email</th>
                    </tr>
                </thead>
                <tfoot>
                    <tr>
                        <th>Id</th>
                        <th>Brugernavn</th>
                        <th>Navn</th>
                        <th>Efternavn</th>
                        <th>Logged</th>
                        <th>Email</th>
                    </tr>
                </tfoot>
            </table>

【问题讨论】:

    标签: javascript jquery ajax json jquery-datatables


    【解决方案1】:

    关于内置搜索功能,我记得,您是对的。它不适用于 AJAX。您可以使用它,但不使用内置搜索。搜索必须在服务器端进行。使用搜索字段时,将使用包含搜索值的附加参数创建一个新的 AJAX。

    要使分页正常工作,您必须在 ajax 响应中返回总条目数,并在初始化 DataTables 时设置分页配置。

    例子

    Ajax 响应:

    {"iTotalRecords":"497","iTotalDisplayRecords":"497","aaData":[]}
    

    分页配置:

    var gridSettings = {
    /* .... */
        "iDisplayStart": 0,
        "iDisplayLength": 20
    };
    $('#elt').dataTable(gridSettings);
    

    【讨论】:

    • 我知道我现在会尝试返回记录数 - idisplay config pr page 有多少记录?
    • 是的 :) 就我而言,我有 497 条记录,我想要每页 20 条。所以我会有 25 页。
    • 实际上我在尝试在我的 json 对象中包含总记录时遇到了一些问题。我使用 FlexJson 将 java 中的 arraylist 序列化为 json - 关于如何包含的任何提示? :)
    • 我不知道 FlexJson,抱歉。
    • 啊,它工作了:) 很好。现在我只需要看看我是否可以确定搜索查询:)
    猜你喜欢
    • 2011-08-09
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-29
    • 2018-04-08
    相关资源
    最近更新 更多