почему живой поиск в Ajax Datatables не работает в моем коде? - PullRequest
1 голос
/ 29 апреля 2019

Я пытался внедрить ajax datatable в мой код, и он работает нормально, но когда я пытался реализовать живой поиск в моей таблице, он не работает, когда я смотрю в элементе inspect-> network, ajax работает, но не фильтруетданные в соответствии с моим поиском, пожалуйста, помогите мне найти решение

Вот мой код контроллера:

function ums_permission_datatable_ajax(){   
        // Datatables Variables
        $draw = intval($this->input->post("draw"));
        $start = intval($this->input->post("start"));
        $length = intval($this->input->post("length"));
                $search = $this->input->post("search");
        $order = $this->input->post("order");

        $col = 0;
        $dir = "";
        if(!empty($order)) {
            foreach($order as $o) {
                $col = $o['column'];
                $dir= $o['dir'];
            }
        }
        if($dir != "asc" && $dir != "desc") {
            $dir = "asc";
        }
        $columns_valid = array(
            "ums_permissions.name", 
            "ums_permissions.function", 
            "ums_permissions.display", 
            "ums_permissions.description", 
            "ums_permissions.system",
        );
        if(!isset($columns_valid[$col])) {
            $order = null;
        } else {
            $order = $columns_valid[$col];
        }
        $orderby[$order] = $dir;

        $total_records = $this->Ums_permissions_model->count();
        //echo '<pre>';print_r($orderby);die;
        $ums_permissions = $this->Ums_permissions_model->retrieve(array(), $length, $start, $orderby);
        //echo $this->db->last_query();die;
        $data = array();
        foreach($ums_permissions as $row) {
            $data[] = array(
                $row->name,                   
                $row->function,             
                $row->display,
                $row->description,
                $row->system,  
                "<a data-toggle='tooltip' data-placement='top' title='Edit' href='".site_url('ums_permissions/add_edit/').$row->id."' class='btn btn-white btn-sm'><i class='fa fa-pencil-square-o fa-fw'></i></a>
                <a data-toggle='tooltip' href='#'  title='Delete' class='btn btn-white btn-sm' role='button' id='delete_wpa_death1' data-deleteid='$row->id'><i class='fa fa-trash fa-fw'></i></a>",
            );
        }
        $output = array("draw" => $draw,"recordsTotal" => $total_records,"recordsFiltered" => $total_records,"data" => $data);  
        echo json_encode($output);
        exit();
    }

А вот мой код Js:

$(document).ready(function() {
                    $("#dataTables").on("preInit.dt", function(){

                     $("#dataTables_wrapper input[type='search']").after("<button type='button' id='btnexample_search'></button>");
                   });                  
            $.fn.dataTable.moment('DD/MM/YYYY');  
            $('.dataTables').dataTable({
                iDisplayLength: 50,
                "initComplete":function(){onint();},
                "processing": true,
                "serverSide": true,
                "ajax": {
                    url : "<?php echo site_url("ums_permissions/ums_permission_datatable_ajax") ?>",
                    type : 'POST',
                    "data": function(d) {
                       var frm_data = $('form').serializeArray();
                       $.each(frm_data, function(key, val) {
                         d[val.name] = val.value;
                       });
                       var searchValue = d.search.value;
                       return d;
                     }
                },
            }); 
        });
        function onint(){  
         // take off all events from the searchfield
         $("#dataTables_wrapper input[type='search']").off();
         // Use return key to trigger search
         $("#dataTables_wrapper input[type='search']").on("keydown", function(evt){
              if(evt.keyCode == 13){
                $("#dataTables").DataTable().search($("input[type='search']").val()).draw();
              }
         });
         $("#btnexample_search").button().on("click", function(){
               $("#dataTables").DataTable().search($("input[type='search']").val()).draw();

         });
       }

1 Ответ

0 голосов
/ 29 апреля 2019

Вам нужно будет выполнить весь поиск и фильтрацию на стороне сервера.Для каждого запроса поиска / фильтра или страницы таблица данных передает все это как данные формы на страницу сервера.См. https://www.datatables.net/manual/server-side. Вы должны будете использовать эти данные формы для фильтрации / поиска / разбивки на записи в таблице sql и передачи их соответственно клиенту.Таблица данных просто показывает, что он получает с сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...