2015-03-06 1 views
8

Я использую DataTables 1.10Добавить параметр в DataTable вызова Ajax, прежде чем рисовать

Кто-нибудь знает, как динамически добавить параметр в вызов 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(); 
}) 
+0

Почему бы не использовать '$ _GET' при вызове? Отправьте параметр в '$ _GET' на сервер, и сервер обработает его соответствующим образом. Трудно сказать, что вы просите без примера кода. – Sablefoste

+0

Я не уверен, что вы поняли вопрос, я пытаюсь выяснить, как отправить этот параметр на сервер после инициализации таблицы. – bstras21

+0

Опять же, пожалуйста, предоставьте некоторый .js-код, как вы инициализируете dataTable. Кроме того, похоже, что вы используете устаревшие таблицы данных; вы найдете более легкие в использовании новые данные. – Sablefoste

ответ

4

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

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

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

    } 
}); 

Handle события нажатия на кнопку:

ПРИМЕЧАНИЕ: Я предполагаю, что это единственное место, где вы будете добавлять динамические параметры для вызова 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(); 
}); 
+0

Это тоже не сработало. Я попытался изменить me.data на table.data, потому что меня не хватает, но нет. – bstras21

+0

Что делать, если я хочу, чтобы новый параметр был портирован как пользовательский объект vm как второй параметр действия? –

1

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

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

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

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

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

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