Добавить параметр в вызов DataTable ajax перед рисованием

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

кто-нибудь знает, как динамически добавлять параметр в вызов ajax перед таблицей.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(); 
})

2 ответов


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

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

 $('#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();
 });

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

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

затем, при необходимости, в качестве первого шага "на ничью".DT " событие я изменяю его обратно на обычный URL:

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

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