DataTable 1.10.15 表显示所有结果,而不是在 PHP 中显示 10 行

Posted

技术标签:

【中文标题】DataTable 1.10.15 表显示所有结果,而不是在 PHP 中显示 10 行【英文标题】:DataTable 1.10.15 table is displaying all results rather than displaying 10 rows in PHP 【发布时间】:2017-12-29 06:10:37 【问题描述】:

我正在使用 CodeIgniter 3 来设置应用程序。该应用程序有一个日志页面,该页面应该在屏幕上显示来自所需 mysql 表的十条最新记录。数据作为 JSON 对象接收。然后,DataTable 应该允许用户相应地分页到其他记录。问题是即使返回的记录超过十个,也会显示所有返回的记录。

这是我的 CDN 链接:

<link rel="stylesheet" type="text/css" href="//cdn.datatables.net/1.10.15/css/jquery.dataTables.css">
<script charset="utf8" src="https://cdn.datatables.net/1.10.15/js/jquery.dataTables.min.js"></script>

这里是 jQuery 代码:

var Table = 
/**
 *
 * @function init
 * @description Initializes the table object
 * @memberOf Table
 * @param string name Name used as dom element id
 * @param string url Url to data source
 * @param array columns Column names
 * @returns void
 */
init: function(name,url,columns) 
    this.col_array = columns;
    this.name = name;
    this.url = url;
    this.createTable();

    $('table#'+this.name).DataTable( 
            serverSide: true,
            displayStart: 10,
            sDom: '<"top"lp>t<"bottom"i><"clear">',
            ajax: url,
            columns: this.getColumns()
    );

    var dTable = $('table#'+this.name).DataTable();
    for(var i in this.col_array)
        $(dTable.column(i).header()).text(this.col_array[i]);
    

,
/**
 * @function createTable
 * @description Creates a dom element for the table object
 * @memberOf Table
 * @returns void
 */
createTable: function() 
    $("div#table ").append('<table id="'+this.name+'" class="display" cellspacing="0"  />');
,
/**
 * @function getColumns
 * @description Return an array of column data
 * @memberOf Table
 * @returns Array|Table.getColumns.c
 */
getColumns: function()
    var c = [];

    for(var k in this.col_array)
        c.push( "data": this.col_array[k]);
    

    return c;
,
;

这是我对表格的 html 标记:

<div id="table" style="width:95%; margin-left:10px;"></div>

这是我在 js 文件中调用表格的方式:

Table.init('logs', location + '/get_data', ['Username', 'Date', 'Login', 'Logout']);

【问题讨论】:

当 serverSide 设置为 true 时,由服务器而不是客户端发送回十行。如果您实际上将所有结果发回,请删除 serverSide 或将其设置为 false,然后客户端上的 DataTables 将处理它。 谢谢。关闭 serverSide 工作。 【参考方案1】:

实际上,我发现您的代码存在许多问题。看看我的内联 cmets。 此外,您并没有真正维护状态(从我上面看到的),所以我会使用常规函数而不是创建对象。

    var Table = 
        /**
         *
         * @function init
         * @description Initializes the table object
         * @memberOf Table
         * @param string name Name used as dom element id
         * @param string url Url to data source
         * @param array columns Column names
         * @returns void
         */
        init: function (name, url, columns) 
            this.col_array = columns;
            this.name = name;
            this.url = url;
            this.createTable();
            // ***************************** I added the datatable to your object instead of a variable
            this.dTable = $('table#' + this.name).DataTable(
                // **************************** this shouild be false if you are sending all of the data 
                // ************ back from the server
                serverSide: false,
                // ****************************** This attribute causes to start displaying data
                // at row ten, is that what you intended?  otherwise, used length if you are setting rows per page
                displayStart: 10,
                // rows per page
                pageLength:10,
                // sDom is legacy, just use "dom"
                "dom": '<"top"lp>t<"bottom"i><"clear">',
                ajax: url,
                columns: this.getColumns()
            );

            //    var dTable = $('table#' + this.name).DataTable();

            //  ************** this problem will not work. See note below in getColumns section
           // for (var i in this.col_array) 
           //     $(dTable.column(i).header()).text(this.col_array[i]);
          //  

        ,
        /**
         * @function createTable
         * @description Creates a dom element for the table object
         * @memberOf Table
         * @returns void
         */
        createTable: function () 
            // ***************** you need to add the thead tag for dynamic columns
            $("div#table ").append('<table id="' + this.name + '" class="display" cellspacing="0"  ><thead></thead><tbody></tbody></table>');
        ,
        /**
         * @function getColumns
         * @description Return an array of column data
         * @memberOf Table
         * @returns Array|Table.getColumns.c
         */
        getColumns: function () 
            var c = [];

            for (var k in this.col_array) 

                // ***************************** when using dynamic columns (columns not a part of your html)
                // ***************** you need to add  the title attribute
                c.push( "data": this.col_array[k], "title": this.col_array[k] );
            

            return c;
        ,
    ;

【讨论】:

我会考虑你的建议。代码看起来不错。感谢您的意见。

以上是关于DataTable 1.10.15 表显示所有结果,而不是在 PHP 中显示 10 行的主要内容,如果未能解决你的问题,请参考以下文章

在Entity Framework下了解多个表结果

使用 Javascript 填充表数据时,jQuery Datatable 功能不起作用

DataTable() - 隐藏多列与特定值匹配的所有行

获取所有表到 DataTable[]

显示包含数据库表名称的 DataTable

Oracle存储过程创建临时表,插入数据后,怎么返回临时表数据,并在asp.net中接收到datatable中