Я использую 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();
})
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();
});
Если вы используете GET, после инициализации таблицы данных вы можете использовать URL-адрес функции и загрузить, чтобы указать другой URL-адрес.
var table = $('#tableId').DataTable();
table.ajax.url( urlFiltros ).load();
Мой способ не такой красивый, но очень простой и отлично работает: когда я хочу передать пользовательские параметры при перерисовке 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/');
// ...
)};
Единственный недостаток этого подхода в том, что требуется некоторая хитрость, чтобы втиснуть эти настраиваемые параметры в альтернативный путь. Кроме того, требуется некоторая работа на стороне сервера, чтобы подготовить этот альтернативный маршрут и извлечь из него эти настраиваемые параметры.
Похожие вопросы
Связанные вопросы
Новые вопросы
jquery
jQuery — это библиотека JavaScript. Также рассмотрите возможность добавления тега JavaScript. jQuery — это популярная кросс-браузерная библиотека JavaScript, которая упрощает обход объектной модели документа (DOM), обработку событий, анимацию и взаимодействие AJAX, сводя к минимуму расхождения между браузерами. Вопрос с тегом jQuery должен быть связан с jQuery, поэтому jQuery должен использоваться рассматриваемым кодом, и в вопросе должны быть как минимум элементы, связанные с использованием jQuery.