Я использую плагин jQuery datatables и загружаю свои данные, которые я загрузил в DOM внизу страницы, и запускаю плагин следующим образом:
var myData = [
{
"id": 1,
"first_name": "John",
"last_name": "Doe"
}
];
$('#table').dataTable({
data: myData
columns: [
{ data: 'id' },
{ data: 'first_name' },
{ data: 'last_name' }
]
});
Сейчас. после выполнения какого-либо действия я хочу получить новые данные с помощью ajax (но не создавать опцию ajax в таблицах данных - не поймите меня неправильно!) и обновить таблицу этими данными. Как я могу это сделать с помощью API таблиц данных? Документация очень запутанная, и я не могу найти решение. Любая помощь будет очень признательна. Спасибо.
Ответы:
РЕШЕНИЕ: (Примечание: это решение предназначено для таблиц данных версии 1.10.4 (на данный момент), а не для устаревшей версии).
УТОЧНЕНИЕ Согласно документации API (1.10.15), к API можно получить доступ тремя способами:
Современное определение DataTables (верхний регистр):
var datatable = $( selector ).DataTable();
Устаревшее определение DataTables (нижний регистр):
var datatable = $( selector ).dataTable().api();
Используя
new
синтаксис.var datatable = new $.fn.dataTable.Api( selector );
Затем загрузите данные так:
Используйте,
draw(false)
чтобы оставаться на той же странице после обновления данных.Ссылки API:
https://datatables.net/reference/api/clear ()
https://datatables.net/reference/api/rows.add ()
https://datatables.net/reference/api/draw ()
источник
datatable.clear().rows.add(newDataArray).draw()
). Что касается этого комментария, я использую версию 1.10.18Ты можешь использовать:
Jsfiddle
Обновить. И да, текущая документация не так хороша, но если у вас все в порядке, используя старые версии, вы можете обратиться к устаревшей документации .
источник
Вам нужно уничтожить старый экземпляр таблицы данных, а затем повторно инициализировать таблицу данных.
Сначала проверьте, существует ли экземпляр таблицы данных, используя $ .fn.dataTable.isDataTable
если существует, уничтожьте его, а затем создайте новый экземпляр, подобный этому
источник
Вот решение для устаревшей версии 1.9.4.
источник
В моем случае я не использую встроенный ajax api для передачи Json в таблицу (это связано с некоторым форматированием, которое было довольно сложно реализовать в обратном вызове рендеринга datatable).
Мое решение состояло в том, чтобы создать переменную во внешней области функций onload и функцию, которая обрабатывает обновление данных (
var table = null
например).Затем я создаю экземпляр своей таблицы в методе загрузки
и, наконец, в функции, которая обрабатывает обновление, я вызываю методы clear () и destroy (), извлекаю данные в таблицу html и повторно создаю экземпляр таблицы данных как таковой:
Надеюсь, кому-то это пригодится!
источник