2014-11-28 16 views
1

Я пытаюсь обновить от старых Datatables до новых Datatables 1.10. Проблема заключается в том, что я использую форму для создания пользовательских фильтров и хотел бы, например, каждый раз, когда выбор изменяется, таблица перезагружается с новыми фильтрами данных.Datatables 1.10 и ajax.reload() с новыми данными

здесь является частью кода:

$(document).ready(function() { 
     var table = $('#main_table_<?=MODULO?>_<?=THIS?>').DataTable({ 
      dom   : 'T<"clearfix">lfrt<"clearfix">ip', 
      stateSave : true, 
      pageLength : 25, 
      pagingType : "full_numbers", 
      processing : true, 
      serverSide : true, 

      ajax  : { 
         url : "<?=CAMINHO?>_lista_registos_busca.php", 
         data: buildSearchData 
      } 

     }); 

     function buildSearchData(){ 
      var obj = { 
       id_utilizador  : $("select#id_utilizador option:selected").val(), 
       id_departamento  : $("select#id_departamento option:selected").val(), 
       id_escritorio  : $("select#id_escritorio option:selected").val(), 
       id_contrato_tipo : $("select#id_contrato_tipo option:selected").val(), 
      }; 
      return obj; 
     } 

     $("select#id_utilizador, select#id_departamento, select#id_escritorio, select#id_contrato_tipo").change(function() { 
      table.ajax.reload(); 
     }); 

ajax.reload() отлично работает и данные надлежащим образом отправлены, за исключением того, что ни один из DataTable параметров отправки. Альтернативный метод:

$(document).ready(function() { 
     var table = $('#main_table_<?=MODULO?>_<?=THIS?>').DataTable({ 
      dom   : 'T<"clearfix">lfrt<"clearfix">ip', 
      stateSave : true, 
      pageLength : 25, 
      pagingType : "full_numbers", 
      processing : true, 
      serverSide : true, 

      ajax  : { 
         url : "<?=CAMINHO?>_lista_registos_busca.php", 
         data: { 
          id_utilizador : $("select#id_utilizador option:selected").val(), 
          id_departamento : $("select#id_departamento option:selected").val(), 
          id_escritorio : $("select#id_escritorio option:selected").val(), 
          id_contrato_tipo : $("select#id_contrato_tipo option:selected").val(), 

         } 

      } 

     }); 

Подобно этому, все данные посылаются, ajax.reload() перезагружает таблицу, но данные из выбирает не обновляется на изменение.

Любой из вас, ребята, может помочь мне в решении этого вопроса? Спасибо заранее.

+0

Возвращаясь к 1.9 ... не может найти решение для этого в любом месте. Не могу поверить, что кто-либо когда-либо использовал это для более сложной фильтрации данных. В 1.9 я могу легко справиться с fnServerData и aoData.push ... в 1.10, не могу понять :( – jaclerigo

ответ

0

Я думаю, вы пропустили (), так что функция buildSeachData на самом деле не называется.

$(document).ready(function() { 
    var table = $('#main_table_<?=MODULO?>_<?=THIS?>').DataTable({ 
     dom   : 'T<"clearfix">lfrt<"clearfix">ip', 
     stateSave : true, 
     pageLength : 25, 
     pagingType : "full_numbers", 
     processing : true, 
     serverSide : true, 

     ajax  : { 
        url : "<?=CAMINHO?>_lista_registos_busca.php", 
        data: buildSearchData() 
     } 

    }); 

    function buildSearchData(){ 
     var obj = { 
      id_utilizador  : $("select#id_utilizador option:selected").val(), 
      id_departamento  : $("select#id_departamento option:selected").val(), 
      id_escritorio  : $("select#id_escritorio option:selected").val(), 
      id_contrato_tipo : $("select#id_contrato_tipo option:selected").val(), 
     }; 
     return obj; 
    } 

    $("select#id_utilizador, select#id_departamento, select#id_escritorio, select#id_contrato_tipo").change(function() { 
     table.ajax.reload(); 
    }); 
+0

Здравствуйте, добавив отсутствующий(), он передает все параметры и параметры формы Datatable, но не делает повторно отправить новые данные с помощью изменения триггера, а затем table.ajax.reload(). – jaclerigo

0

Это путь вы являются обязательными для вашего data к ajax.data.

Вместо:

ajax: { 
     url : "<?=CAMINHO?>_lista_registos_busca.php", 
     data: buildSearchData 
} 

Попробуйте это:

ajax: { 
     url : "<?=CAMINHO?>_lista_registos_busca.php", 
     data: function (d) { 
       Object.assign(d, buildSearchData); 
       return d; 
      } 
} 

Таким образом, вы перехватывать 'DataTables размещать параметры и вы объединяете свои собственные параметры.

Для документации: https://datatables.net/reference/option/ajax.data

Для других вопросов, связанные с StackOverflow:

how to pass parameters on reload of datatables

DataTables ajax.reload() with parameters

Надеется, что это помогло!

Смежные вопросы