Я использую DataTables 1.10

Кто-нибудь знает, как динамически добавить параметр к вызову ajax перед table.draw (), чтобы у моего запроса были новые параметры? Я везде искал и не нашел ответа.

У меня есть кнопки, которые человек может нажимать и на основе этой кнопки отправлять на сервер различные параметры.

$('#mytable').DataTable({
        iDisplayLength: 10,
        responsive: true,
        processing: true,
        serverSide: true,
        searching: false,
        bLengthChange: false,
        bProcessing: true,
        paging: true,
         ajax: {
            url: me.url,
            dataType: 'json',
            cache:false,
            type: 'GET',
            data: function ( d ) {
                $.extend( d, me.data);
                d.supersearch = $('.my-filter').val();
            }
        },
        columns: me.columns,
        columnDefs: me.renderer,
        initComplete: function() {

        }
    });

Все это работает нормально, но затем я пытаюсь привязать его к кнопке, чтобы передать новые параметры.

$('.button').on('click', function(){
      var table  = $('#mytable').DataTable();
      table.ajax.params({name: 'test'}); <- I want to do something like this
      table.draw(); 
})
13
bstras21 6 Мар 2015 в 22:50

3 ответа

Лучший ответ

Я изменил ваш код, чтобы делать то, что вам нужно.

Инициализировать таблицу данных:

 $('#mytable').DataTable({
    iDisplayLength: 10,
    responsive: true,
    processing: true,
    serverSide: true,
    searching: false,
    bLengthChange: false,
    bProcessing: true,
    paging: true,
    ajax: {
       url: me.url,
       dataType: 'json',
       cache:false,
       type: 'GET',
       data: function ( d ) {
          $.extend(d, me.data);
          d.supersearch = $('.my-filter').val();

          // Retrieve dynamic parameters
          var dt_params = $('#mytable').data('dt_params');
          // Add dynamic parameters to the data object sent to the server
          if(dt_params){ $.extend(d, dt_params); }
       }
    },
    columns: me.columns,
    columnDefs: me.renderer,
    initComplete: function() {

    }
 });

Обработка события клика на кнопке:

ПРИМЕЧАНИЕ. Я предполагаю, что это единственное место, где вы можете добавлять динамические параметры для вызова AJAX.

 $('.button').on('click', function(){
    // Set dynamic parameters for the data table
    $('#mytable').data('dt_params', { name: 'test' });
    // Redraw data table, causes data to be reloaded
    $('#mytable').DataTable().draw();
 });
10
Gyrocode.com 14 Мар 2015 в 04:20

Если вы используете GET, после инициализации таблицы данных вы можете использовать URL-адрес функции и загрузить, чтобы указать другой URL-адрес.

var table = $('#tableId').DataTable();
table.ajax.url( urlFiltros ).load();
0
Lalo19 8 Июн 2020 в 15:36

Мой способ не такой красивый, но очень простой и отлично работает: когда я хочу передать пользовательские параметры при перерисовке DataTable, сначала я просто меняю его URL:

$('#table_id').DataTable().ajax.url('/custom/path/with/custom/parameters/inside/');
$('#table_id').DataTable().draw();

Затем, если необходимо, в качестве первого шага события «on draw.dt» я изменяю его обратно на обычный URL:

$('#table_id').on('draw.dt', function() {
    $('#table_id').DataTable().ajax.url('/normal/path/for/ajax/source/');
    // ...
)};

Единственный недостаток этого подхода в том, что требуется некоторая хитрость, чтобы втиснуть эти настраиваемые параметры в альтернативный путь. Кроме того, требуется некоторая работа на стороне сервера, чтобы подготовить этот альтернативный маршрут и извлечь из него эти настраиваемые параметры.

4
cinemazealot 10 Фев 2017 в 10:20