使用服务器端时搜索和分页不起作用

Posted

技术标签:

【中文标题】使用服务器端时搜索和分页不起作用【英文标题】:Search and Pagination not working while using server-side 【发布时间】:2020-12-01 06:17:07 【问题描述】:

我正在使用数据表服务器端。我正在使用 ajax 获取记录。我的问题是,搜索和分页不起作用。我正在获取搜索和分页以及所有数据。

请检查下图,我每页显示 10 条记录,但显示全部。

我在 *** 上查看了有关此主题的服务器问题。我几乎检查了每个问题,但仍然找不到解决方案。

我正在使用下面的代码

if($_REQUEST['action']=='adminList')

$stmt = $pdo->prepare("SELECT count(*) FROM tbl_admin");
$stmt->execute();
$totalRecords = $stmt->fetchColumn();
$query="SELECT `admin_id`, `a_firstname`, `a_lastname`, `a_email`,  `date_of_created` FROM `tbl_admin` WHERE is_active = 1 order by date_of_created DESC";

try 
      $stmt = $pdo->prepare($query);
      $stmt->execute();
      $result = $stmt->fetchAll();
             
      $data['data'] = [];
      foreach ($result as $row) 

        $arr_result = array(
                    //"id" =>$i++,
                    "name" =>$row['a_firstname'].' '.$row['a_lastname'],
                    "email" => $row['a_email'],
                    "date_of_created" => $row['date_of_created'],
        );


        $data['data'][] = $arr_result;
                

                
                
                catch(PDOException $e) 
                    echo "Error: " . $e->getMessage();
                

$json_data = array(  
"draw"=> intval( $_REQUEST['draw'] ),
"recordsTotal"    => intval($totalRecords),  
"recordsFiltered" => intval($totalRecords),
"data"            => $data['data']
);

// echo "<pre>";
 //print_r($json_data);
echo json_encode($json_data);
//exit();

Js

$(document).ready(function() 
  var dataTable = $('#adminList').DataTable(
    "processing": true,
    "serverSide": true,
    "paging": true,
    "searchable": true,
    "ajax": 
      url: "fetch.php",
      type: "post",
      data: 
        action: "adminList"
      
    ,
    language: 
      sLengthMenu: "Show _MENU_", // remove entries text
      searchPlaceholder: "Search",
      emptyTable: "No record found",
      search: ""
    ,
    "pageLength": 10,
    "paging": true,
    "columns": [
        "data": "name"
      ,
      
        "data": "email"
      ,
      
        "data": "date_of_created"
      
    ]
  );
);

这是我的输出

Array
(
    [draw] => 1
    [recordsTotal] => 17
    [recordsFiltered] => 17
    [data] => Array
        (
    // getting my all records
)
)

谁能帮我看看我的代码有什么问题?

【问题讨论】:

legacy.datatables.net/examples/data_sources/server_side.html 上有一些(旧)示例代码。对于分页,请查看if ( isset( $_GET['iDisplayStart'] ) &amp;&amp; $_GET['iDisplayLength'] != '-1' ),因为您的代码始终获取所有数据(不是您的 SQL 中的 LIMIT) @NigelRen,但是我必须在哪里添加该代码?我相信来自数据表插件。 @NigelRen,如果我在查询中使用 LIMIT,那么我将只获得有限的价值..对吗?我必须显示所有记录,并且每页必须显示 10 条记录 LIMIT 允许您说出要返回的记录集 - 看看Pagination using mysql LIMIT, OFFSET @NigelRen,我在查询中设置了 LIMIT 10。所以现在我只得到 10 条记录,但其他记录呢?我相信数据表可以处理所有此类限制。 【参考方案1】:

问题

您已使用serverSide: true 启用服务器端处理模式,这需要您处理脚本在服务器端执行的搜索、排序和分页。但是,您的脚本会返回所有数据,这就是为什么您会看到所有结果而不仅仅是第一页。

解决方案

    编写适当的服务器端处理代码或使用帮助程序库。

    例如,DataTables 分发包括 ssp.class.php 帮助程序 calss 和 sample script,以帮助在您使用 PHP 时生成响应。

    否则,您可以检查sent parameters 并根据startlength 请求参数对结果进行分页。

    通过删除 serverSide: true 作为初始化选项来切换到客户端处理模式,并在服务器端响应中返回所有数据。请记住,如果您拥有大型数据集(>10,000 条记录),此解决方案并不理想。

【讨论】:

感谢您的回答,让我实现这个 关于 ssp.class.php。一个月前我问了这个问题,但我没有得到解决方案***.com/questions/62708059/… 我试过 lengthMenu:[[3,25,50,100,-1],[3,25,50,100,"All"]], "pageLength":3,但我的所有记录仍然显示. 我删除了所有代码并引用此链接datatables.net/examples/server_side/simple.html。现在我得到了输出。但是我这个问题***.com/questions/63426594/…

以上是关于使用服务器端时搜索和分页不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用动态数据时,搜索和分页功能在 DataTable 中不起作用

在Codeigniter中搜索的分页不起作用

jquery数据表服务器端分页不起作用

使用 Ajax 调用的 Extjs Grid 分页不起作用

数据表分页不起作用?

MyBatis 使用PageHelper分页不起作用