Phalcon PHP:Jquery Datatable Server Side 单个列过滤仅提供首页选择选项

Posted

技术标签:

【中文标题】Phalcon PHP:Jquery Datatable Server Side 单个列过滤仅提供首页选择选项【英文标题】:Phalcon PHP : Jquery Datatable Server Side individual column filtering only gives first pages selection options 【发布时间】:2019-03-04 02:05:14 【问题描述】:

这是我的 Jquery 服务器端数据表设置,从我的数据库正确返回数据并且过滤确实有效,但问题是每列的选择框仅显示第一页数据的值。

我正在为此使用 mysql 数据库

Phalcon PHP 控制器操作:

public function getJsonBOMuploadAction($dummy) 
    if ($this->request->isAjax()) 
        $this->setJsonResponse();
            $request = $this->request;
            $p_draw = $request->getPost("draw");
            $p_start = $request->getPost("start");
            $p_length = $request->getPost("length");
            $p_search = $this->GetSearchString($request->getPost("search"));
            $p_col_search = $this->GetSearchString($request->getPost("columns"));

            try 
                $data = CallableRoutine::getDocumentRouterList($p_start
                                , $p_length, $p_search, intval($p_col_search[0])
                                , $p_col_search[1], $p_col_search[2]);
             catch (Exception $ex) 
                return $ex;
            

            $count = $data[count($data) - 1]["id"];
            array_splice($data, count($data) - 1);
            return Array("data" => $data,
                "draw" => $p_draw,
                "recordsFiltered" => $count,
                "search" => $p_search,
                "col_search" => $p_col_search,
                "recordsTotal" => $count);
        
    

Jquery 代码:

        vm.initExampleDocrouterDatatable = function() 
            $('#example_docrouter').DataTable(
                "processing": true,
                "serverSide": true,
                "ajax": 
                    "url": "./product_bom/getJsonBOMupload",
                    "type": "POST"
                ,
                "columns": [
                    "data": "id",
                    "data": "name",
                    "data": "description"
                ],
                // ==============================================================
                // ====== Column filter code reference:
                // ====== https://datatables.net/examples/api/multi_filter_select
                initComplete: function () 
                    this.api().columns().every( function () 
                        var column = this;
                        var select = $('<select><option value=""></option></select>')
                            .appendTo( $(column.footer()).empty() )
                            .on( 'change', function () 
                                var val = $.fn.dataTable.util.escapeRegex(
                                    $(this).val()
                                );

                                column
                                    .search( val ? '^'+val+'$' : '', true, false )
                                    .draw();
                             );

                        column.data().unique().sort().each( function ( d, j ) 
                            select.append( '<option value="'+d+'">'+d+'</option>' )
                         );
                     );
                
            );
        ;

这是我的 HTML:

 <table id="example_docrouter" class="table row-border hover table-responsive display nowrap table-bordered">
            <thead>
                <tr>
                    <th class="thbg thead-css">ID</th>
                    <th class="thbg thead-css">Name</th>
                    <th class="thbg thead-css">Description</th>
                </tr>
            </thead>
            <tfoot class="noprint">
                <tr>
                    <th class="thead-css">ID</th>
                    <th class="thead-css">Name</th>
                    <th class="thead-css">Description</th>
                </tr>
            </tfoot>
            <tbody></tbody>
 </table>

【问题讨论】:

【参考方案1】:

显然你正在使用 $p_length 进行分页。不清楚这个值是从哪里来的,你可能会发现使用 Phalcon 分页器很有用:https://docs.phalconphp.com/zh/3.2/db-pagination

【讨论】:

实际上该值来自 mysql 存储过程,然后我在可调用例程中调用存储过程,然后在 php 操作中调用可调用例程 如果假设 $p_length 像 MySQL LIMIT 一样工作是正确的,那么您是否会返回记录总数?否则,您将不得不摆弄 OFFSET 和 LIMIT 以逐步获得所有结果。从结果集中创建一个 var_dump 并检查是否是 Phalcon 没有返回所有数据,或者它是否是来自存储过程的结果集没有提供所有数据。 好的,我会检查一下 进展如何?如果您的数据集非常大,您可能也会觉得这很有趣:phpdelusions.net/pdo#mysqlnd

以上是关于Phalcon PHP:Jquery Datatable Server Side 单个列过滤仅提供首页选择选项的主要内容,如果未能解决你的问题,请参考以下文章

工具技巧PHP之Phalcon环境搭建

工具技巧PHP之Phalcon环境搭建

工具技巧PHP之Phalcon环境搭建

phpstudy下安装phalcon

mac下安装phalcon

Phalcon php orm无法关联表