【问题标题】:How to implement search box and ordering in DataTables如何在 DataTables 中实现搜索框和排序
【发布时间】:2020-08-02 20:58:12
【问题描述】:

我正在尝试将来自 DataTables.net 的搜索框与我的数据连接起来。我让 mySQL 数据库通过 PHP 连接它,并在支持 AdminLTE 和 DataTables.net 的页面上呈现它。

我使用本教程作为学习资料来完成我的项目:https://codinginfinite.com/getting-started-web-application-php-mysql-tutorials/

现在我已经成功地将我的数据从 SQL 服务器加载到 html 数据表中,但现在我找不到如何将表中的数据连接到搜索框(或排序和分页功能)的解决方案。每次我尝试搜索或排序我的数据时,我都会得到一个空白的数据表。分页无法正常工作,表格总是以完整的行数显示。

有人可以帮忙吗?

  1. 这是我成功加载表格(在 id="tablica" 中)的 php 页面的代码。这段代码的末尾是 ajax json 脚本,用于从 mySQL 数据库获取数据。
    <?php
      $content = '<div class="row">
                <div class="col-xs-12">
                <div class="box">
                  <div class="box-header">
                    <h3 class="box-title">Popis</h3>
                  </div>
                  <!-- /.box-header -->
                  <div class="box-body">
                    <table id="tablica" class="table table-bordered table-hover">
                      <thead>
                      <tr>
                        <th>Id</th>
                        <th>Naziv</th>
                        <th>Autori</th>
                        <th>Referenca</th>
                        <th>Datum u</th>
                        <th>Datum a</th>
                        <th>Pripada</th>
                        <th>Action</th>
                      </tr>
                      </thead>
                      <tbody>
                      </tbody>
                      
                    </table>
                  </div>
                  <!-- /.box-body -->
                </div>
                <!-- /.box -->
              </div>
            </div>';
      $header = '<h1> Popis <small>Ovdje se nalazi lista.</small> </h1>';
      include('../master.php');
    ?>
    
    <!-- page script -->
<script>
  $(document).ready(function(){
    $.ajax({
        type: "GET",
        url: "../api/porodica/read.php",
        dataType: 'json',
        success: function(data) {
            var response="";
            for(var user in data){
                response += "<tr>"+
                "<td>"+data[user].id_p+"</td>"+
                "<td>"+data[user].naziv_p+"</td>"+
                "<td>"+data[user].autor+"</td>"+
                "<td>"+data[user].ref+"</td>"+
                "<td>"+data[user].red_id+"</td>"+
                "<td>"+data[user].datum_u+"</td>"+
                "<td>"+data[user].datum_a+"</td>"+
                
                "<td><a href='update.php?id="+data[user].id_p+"'>Edit</a> | <a href='#' onClick=Remove('"+data[user].id_p+"')>Remove</a></td>"+
                "</tr>";
            }
            $(response).appendTo($("#tablica"));
        }
    });
  });

</script>
  1. 这是我的 master.php 文件的结尾。我包含了所有必要的 css 和 js 文件,以便 DataTables 工作。
     <!-- ./wrapper -->
    <!-- REQUIRED JS SCRIPTS -->
    <!-- jQuery 3 -->
    <script src="../bower_components/jquery/dist/jquery.min.js"></script>
    <!-- Bootstrap 3.3.7 -->
    <script src="../bower_components/bootstrap/dist/js/bootstrap.min.js"></script>
    <!-- DataTables -->
    <script src="../bower_components/datatables.net/js/jquery.dataTables.min.js"></script>
    <script src="../bower_components/datatables.net-bs/js/dataTables.bootstrap.js"></script>
    <script src="../bower_components/datatables.net-bs/js/app.min.js"></script>  
    <script>  
$(function () {  

$('#tablica').DataTable({  
"pageLength": 10,  
"paging": true,  
"lengthChange": false,  
"searching": true,  
"ordering": true,  
"info": false,
"autoWidth": false  
});  
});  
</script>
    

【问题讨论】:

  • 目前,DataTables 认为您的表是空的。您需要让 DataTables 代表您处理 JSON。因此,无需构建 HTML 字符串并将它们添加到 DOM,您需要将 ajax 调用放在 DataTables 配置代码中,让 DataTables 为您完成所有工作。添加到 DOM 的数据对 DataTables 不直接可见。请参阅各种示例here。一旦 DataTables 可以看到您的数据,它就可以对其进行排序和过滤。
  • 如果你在那之后仍然卡住,然后编辑你的问题,以显示你的 JSON 的结构(和一些示例数据)。这将有助于提供更具体的指导。
  • 我设法解决了这个问题!感谢您的提示和时间!我没有改变数据插入 (DOM) 的方法,但我宁愿在 DataTables 初始化之前强制 ajax 运行,它仍然像魅力一样工作!
  • 很高兴你解决了它。这是一种公平的方法——您当然可以为已经包含数据的 HTML 数据初始化 DataTables。您可能会发现这种方法有局限性 - 取决于您需要对表执行什么操作,以及它的数据如何更新。

标签: php jquery ajax datatables


【解决方案1】:

我设法找到了解决方案。问题在于 ajax 具有异步特性。在初始化 DataTables 并且 DataTables 认为有问题的表一直是空的之后,ajax 正在将数据读入表中。

我在使用 :complete 在主要 ajax 代码之后引入 DataTables 初始化代码后解决了这个问题(我将它从 masters.php 移动到具有 html 表元素的 page.php 中,并将其加入到 ajax json 脚本中/之后) .

我将留下找到解决方案的链接: https://datatables.net/forums/discussion/50329/first-time-using-datatables-no-data-available-in-table

我现在可以运行的代码:

<script>

  $(document).ready(function(){
    $.ajax({
        type: "GET",
        url: "../api/porodica/read.php",
        dataType: 'json',
        success: function(data) {
            var response="";
            for(var user in data){
                response += "<tr>"+
                "<td>"+data[user].id_p+"</td>"+
                "<td>"+data[user].naziv_p+"</td>"+
                "<td>"+data[user].autor+"</td>"+
                "<td>"+data[user].referenca+"</td>"+
                "<td>"+data[user].red_id+"</td>"+
                "<td>"+data[user].datum_u+"</td>"+
                "<td>"+data[user].datum_a+"</td>"+
                
                "<td><a href='update.php?id="+data[user].id_p+"'>Edit</a> | <a href='#' onClick=Remove('"+data[user].id_p+"')>Remove</a></td>"+
                "</tr>";
            }
            $(response).appendTo($("#tablica"));
        },
        
        complete: function () {

$("#tablica").DataTable({ 
"pageLength": 10,  
"paging": true,  
"lengthChange": false,  
"searching": true,  
"ordering": true,  
"info": false, 
"autoWidth": false  
});  
}


    });
  });
  
  
</script>  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 2019-07-13
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    相关资源
    最近更新 更多