Как вручную обновить таблицу данных с новыми данными JSON
Я использую плагин 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 в datatables - не поймите меня неправильно!) и обновите таблицу этими данными. Как я могу это сделать, используя API-интерфейсы datatables? Документация очень запутанна, и я не могу найти решение. Любая помощь будет очень оценена. Спасибо.
Ответы
Ответ 1
РЕШЕНИЕ: (Обратите внимание: это решение для datatables версии 1.10.4 (на данный момент) не устаревшей версии):
ПОДТВЕРЖДЕНИЕ В документации API (1.10.15) к API можно получить доступ тремя способами
-
Современное определение DataTables (верхний верблюд):
var datatable = $( selector ).DataTable();
-
Устаревшее определение DataTables (нижний случай верблюда):
var datatable = $( selector ).dataTable().api();
-
Использование синтаксиса new
.
var datatable = ew $.fn.dataTable.Api( selector );
Затем загрузите данные следующим образом:
$.get('myUrl', function(newDataArray) {
datatable.clear();
datatable.rows.add(newDataArray);
datatable.draw();
});
Ссылки API:
https://datatables.net/reference/api/clear()
https://datatables.net/reference/api/rows.add()
https://datatables.net/reference/api/draw()
Ответ 2
Вы можете использовать:
$('#table').dataTable().fnClearTable();
$('#table').dataTable().fnAddData(myData2);
Jsfiddle
Update. И да, текущая документация не так хороша, но если вы используете старые версии, вы можете ссылаться на устаревшую документацию.
Ответ 3
В моем случае я не использую встроенный ajax api для подачи Json в таблицу (это связано с некоторым форматированием, которое было довольно сложно реализовать внутри обратного вызова обработки данных)
Мое решение состояло в том, чтобы создать переменную во внешней области функций onload и функцию, которая обрабатывает обновление данных (например, var table = null
).
Затем я создаю экземпляр таблицы в методе on load
$(function () {
//.... some code here
table = $("#detailReportTable").DataTable();
.... more code here
});
и, наконец, в функции, которая обрабатывает обновление, я вызываю метод clear() и destroy(), извлекаю данные в таблицу html и повторно создаю datatable как таковой:
function getOrderDetail() {
table.clear();
table.destroy();
...
$.ajax({
//.....api call here
});
....
table = $("#detailReportTable").DataTable();
}
Я надеюсь, что кто-то найдет это полезным!
Ответ 4
Вот решение для устаревшего datatable 1.9.4
var myData = [
{
"id": 1,
"first_name": "Andy",
"last_name": "Anderson"
}
];
var myData2 = [
{
"id": 2,
"first_name": "Bob",
"last_name": "Benson"
}
];
$('#table').dataTable({
// data: myData,
aoColumns: [
{ mData: 'id' },
{ mData: 'first_name' },
{ mData: 'last_name' }
]
});
$('#table').dataTable().fnClearTable();
$('#table').dataTable().fnAddData(myData2);