简体   繁体   English

jquery响应后无法重新加载数据表

[英]Can't reload dataTable after jquery response

HTML HTML

It is a sidenav to sort the datatable according to list ID's and Sub-list ID's根据列表 ID 和子列表 ID 对数据表进行排序是一个sidenav

<div id="mySidenav" class="sidenav">  <!-- sidenav starting-->
<ul>
<li class="categoriesli">All Categories</li>
<?php 
  $result = mysqli_query($db, "SELECT id, name FROM categories WHERE c_id = 0");
  while($row = mysqli_fetch_assoc($result)) { ?>
    <div id="categorydiv_<?php echo $row['id']; ?>" onclick="showSubCat(<?php echo $row['id']; ?>)">
    <li id="category_<?php echo $row['id']; ?>" class="categoriesli"><?php echo $row['name']; ?><span class="glyphicon glyphicon-triangle-right pull-right"></span></li>
    </div>
    <li style="padding: 0px;" class="subcategory">
      <ul>
          <?php 
            $result1 = mysqli_query($db, "SELECT c_id, id, name FROM categories WHERE c_id = '".$row['id']."'");
            while($rows = mysqli_fetch_assoc($result1)) { ?>
        <div id="subcatdiv_<?php echo $rows['id']; ?>" class="subcategory_<?php echo $rows['c_id']; ?>"  style="display:none;">
        <li id="subcategory_<?php echo $rows['id']; ?>" onclick="sortSubCat(<?php echo $rows['id']; ?>, <?php echo $row['id']; ?>)"><?php echo $rows['name']; ?></li>
        </div>
        <?php } ?>
      </ul>
    </li>
<?php } ?>
</ul>
</div>

Before button click点击按钮前

I can't get data after button click despite got the json data in an array尽管在数组中获取了 json 数据,但单击按钮后仍无法获取数据

$(document).ready(function(){
  dataTable = $("#datatableId").DataTable({
     "ajax": "retrieve.php",
     "order": []
  });
});

After button click点击按钮后

function sortSubCat(subCatId, catId) {
      $("#datatableId").DataTable().clear();
      $("#datatableId").DataTable().destroy();

    $.ajax({
        url:"retrieve.php",
        type:"POST",
        dataType:"json",
        data:{sub_cat_id:subCatId, cat_id:catId},
        success:function(response){
            console.log(response.data);
            $("#datatableId").DataTable({
                "ajax": response.data
            });

        }
    });
}

First a comment about your solution.首先对您的解决方案发表评论。 When the source of data for the DataTable object creation is a json object, it has to be an object with one field "data" that has the table info.当 DataTable 对象创建的数据源是一个 json 对象时,它必须是一个具有表信息的字段“数据”的对象。 In your case, you're removing that format when you pass response.data .在您的情况下,您在传递response.data时将删除该格式。 i think you should pass "ajax": response .我认为你应该通过"ajax": response

But anyway, you can't simplify all that.但无论如何,你不能简化这一切。 You don't need to destroy de DataTable object and create it again every time.您不需要每次都销毁 de DataTable 对象并重新创建它。 If you're getting your data from and external source with ajax and you just want to reload the table data, just use datatables .reload() function...如果您使用 ajax 从外部源获取数据并且只想重新加载表数据,只需使用 datatables .reload()函数...

$(document).ready(function(){

    var subcatId='', catId='';

    var myDataTable = $("#datatableId").DataTable({
        "ajax": { 
            "url": "retrieve.php",
            "type": "POST",
            "dataType": "json",
            "data": function(d) {
                d.sub_cat_id = subcatId;
                d.cat_id = catId;
            }
        },
        "order": []
    });

    function sortSubCat(selSubCatId,selCatId) {
        subCatId = selSubCatId;
        catId = selCatId;
        myDataTable.ajax.reload();
    }
});

In fact, if you're getting subCatId and catId from two select dropdowns, you could even simplify it more (I'm just giving you an example, adapt the id's and html elements to your case, you can also introduce parameters value validation, etc.)...实际上,如果您从两个select下拉列表中获取 subCatId 和 catId,您甚至可以进一步简化它(我只是举个例子,根据您的情况调整id's和 html 元素,您还可以引入参数值验证,等等。)...

$(document).ready(function(){

    var myDataTable = $("#datatableId").DataTable({
        "ajax": { 
            "url": "retrieve.php",
            "type": "POST",
            "dataType": "json",
            "data": function(d) {
                d.sub_cat_id = $('select#subcatid').val();
                d.cat_id = $('select#catid').val();
            }
        },
        "order": []
    });

    $('button#sortsubcat').click(function() {
        myDataTable.ajax.reload();
    }
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM