【问题标题】:jquery datatable with ajax based pagination带有基于ajax的分页的jquery数据表
【发布时间】:2018-06-24 02:34:06
【问题描述】:

我有使用 Ajax 填充数据表的 javascript 函数。我的 javascript 代码如下所示:

 $('#results').dataTable({
    // Ajax load data
    "ajax": {
        "url": "get_intl_tickets",
        "type": "POST",
        "data": {
            "user_id": 451,
            "csrfmiddlewaretoken" : csrftoken,
        }
    }
 })

我在 django 中的服务器端脚本有一个可以加载大约 500 行数据的函数。现在的问题是我不想一次加载整个数据。相反,我想要前 10 个数据行。然后用分页,另外 10 行这样。 我阅读了页面server side processing 数据表文档。我也尝试了"serverSide": true 选项。我不理解服务器端脚本。给出了一个PHP的例子。似乎他们没有在那里使用任何参数,例如draw, recordsFiltered, recordsTotal。他们在那里使用了 php SSP 类。而且它是做什么的还不得而知。我正在尝试在 django 中实现它。

但我没有找到合适的好文档来实施。任何帮助将不胜感激。

【问题讨论】:

    标签: ajax pagination datatables


    【解决方案1】:

    老问题,但我也很难找到答案,所以万一其他人在这里结束......:P

    我发现这篇 2020 年的文章非常有帮助,特别是第 6 部分显示了“完整代码”,其中包括获取正确的变量、构建 SQL 查询以及如何构建/构造它所响应的数据对象: https://makitweb.com/datatables-ajax-pagination-with-search-and-sort-php/

    他们的例子贴在下面:

    <?php
    ## Database configuration
    include 'config.php';
    
    ## Read value
    $draw = $_POST['draw'];
    $row = $_POST['start'];
    $rowperpage = $_POST['length']; // Rows display per page
    $columnIndex = $_POST['order'][0]['column']; // Column index
    $columnName = $_POST['columns'][$columnIndex]['data']; // Column name
    $columnSortOrder = $_POST['order'][0]['dir']; // asc or desc
    $searchValue = mysqli_real_escape_string($con,$_POST['search']['value']); // Search value
    
    ## Search 
    $searchQuery = " ";
    if($searchValue != ''){
       $searchQuery = " and (emp_name like '%".$searchValue."%' or 
            email like '%".$searchValue."%' or 
            city like'%".$searchValue."%' ) ";
    }
    
    ## Total number of records without filtering
    $sel = mysqli_query($con,"select count(*) as allcount from employee");
    $records = mysqli_fetch_assoc($sel);
    $totalRecords = $records['allcount'];
    
    ## Total number of record with filtering
    $sel = mysqli_query($con,"select count(*) as allcount from employee WHERE 1 ".$searchQuery);
    $records = mysqli_fetch_assoc($sel);
    $totalRecordwithFilter = $records['allcount'];
    
    ## Fetch records
    $empQuery = "select * from employee WHERE 1 ".$searchQuery." order by ".$columnName." ".$columnSortOrder." limit ".$row.",".$rowperpage;
    $empRecords = mysqli_query($con, $empQuery);
    $data = array();
    
    while ($row = mysqli_fetch_assoc($empRecords)) {
       $data[] = array( 
          "emp_name"=>$row['emp_name'],
          "email"=>$row['email'],
          "gender"=>$row['gender'],
          "salary"=>$row['salary'],
          "city"=>$row['city']
       );
    }
    
    ## Response
    $response = array(
      "draw" => intval($draw),
      "iTotalRecords" => $totalRecords,
      "iTotalDisplayRecords" => $totalRecordwithFilter,
      "aaData" => $data
    );
    
    echo json_encode($response);
    

    【讨论】:

      【解决方案2】:

      很好的例子: https://datatables.net/examples/server_side/defer_loading.html

      但是您需要编辑服务器端。 响应演示

      { 绘制:2, 记录过滤:57, 记录总数:57 }

      【讨论】:

      • 你能给我一个服务器端脚本的例子吗?这是我不明白的主要事情。他们给出了一个 PHP 的例子。似乎他们没有在那里使用任何参数,如draw, recordsFiltered, recordsTotal。我正在尝试在 django 中实现它。
      猜你喜欢
      • 1970-01-01
      • 2018-02-03
      • 1970-01-01
      • 2013-02-28
      • 1970-01-01
      • 1970-01-01
      • 2020-12-18
      • 2020-08-17
      • 1970-01-01
      相关资源
      最近更新 更多