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 单个列过滤仅提供首页选择选项的主要内容,如果未能解决你的问题,请参考以下文章