Datatables -Reinitializing datatables в функции - PullRequest
0 голосов
/ 03 ноября 2018

Я все еще учусь кодировать js и datatables, и я работаю над crud, используя ajax. У меня есть этот код здесь:

        load_data();

         function load_data(is_suppliers)
         {
          var dataTable = $('#product_data').DataTable({
           "processing":true,
           "serverSide":true,
           "order":[],
           "ajax":{
            url:"fetch.php",
            type:"POST",
            data:{is_suppliers:is_suppliers}
           },
           "columnDefs":[
            {
             "targets":[0,5,7,8],
             "orderable":false,
            },
           ],
          });
         }

Эта функция предназначена для фильтрации столбцов и работает с этим кодом здесь:

         $(document).on('change', '#supplier_filter', function(){
          var supplier = $(this).val();
          $('#product_data').DataTable().destroy();
          if(supplier != '')
          {
           load_data(supplier);
          }
          else
          {
           load_data();
          }
         });

Проблема в том, что функция инициализирует таблицы данных:

          var dataTable = $('#product_data').DataTable({});

и я уже инициализировал таблицы данных для своих операций crud, поэтому я не могу использовать этот код. Как можно использовать эту функцию, чтобы она могла работать с моей операционной системой?

1 Ответ

0 голосов
/ 12 февраля 2019

Если вы определяете источник данных ajax таблицы с помощью функции, то вы можете определить параметры для отправки вместе с вашим AJAX-запросом во время вызова. Затем вы можете перезагрузить источник данных, когда захотите, и самое последнее значение фильтра будет отправлено вместе с полезной нагрузкой.

Заменить

"ajax":{
  url:"fetch.php",
  type:"POST",
  data:{is_suppliers:is_suppliers}
},

С чем-то вроде

ajax: function(data, callback, _settings) {
  $.ajax({
    type: 'POST',
    url: 'fetch.php',
    data: { is_suppliers: $('#supplier_filter').val() }
  }).then(function(res) {
    callback({ data: res });
  });
},

Теперь, когда таблица сначала загружается, она получает значение фильтра из элемента управления фильтра, а затем отправляет его вместе как часть запроса AJAX.

Позже вы можете снова загрузить данные с помощью

$('#product_data').DataTable().ajax.reload();

И тогда он снова будет смотреть на виджет фильтра, получит значение и отправит новое значение вместе с новым AJAX-запросом.

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