Używam pluginów danych jQuery i ładuję swoje dane, które załadowałem do DOM na dole strony i inicjuję wtyczkę w ten sposób:
var myData = [
{
"id": 1,
"first_name": "John",
"last_name": "Doe"
}
];
$('#table').dataTable({
data: myData
columns: [
{ data: 'id' },
{ data: 'first_name' },
{ data: 'last_name' }
]
});
Teraz. po wykonaniu jakiejś akcji chcę pobrać nowe dane używając Ajax (ale nie opcji Ajax wbudowanej w datatables - nie zrozumcie mnie źle!) i zaktualizować tabelę tymi danymi. Jak mogę to zrobić za pomocą interfejsu API danych? Dokumentacja jest bardzo zagmatwana i nie mogę znaleźć rozwiązania. Każda pomoc będzie bardzo mile widziana. Dzięki.
Odpowiedzi:
ROZWIĄZANIE: (Uwaga: to rozwiązanie dotyczy plików danych w wersji 1.10.4 (w tej chwili), a nie starszej wersji).
WYJAŚNIENIE Zgodnie z dokumentacją API (1.10.15), dostęp do API można uzyskać na trzy sposoby:
Nowoczesna definicja DataTables (wielkie litery):
var datatable = $( selector ).DataTable();
Starsza definicja DataTables (małe litery wielbłąda):
var datatable = $( selector ).dataTable().api();
Korzystanie ze
new
składni.var datatable = new $.fn.dataTable.Api( selector );
Następnie załaduj dane w następujący sposób:
Użyj,
draw(false)
aby pozostać na tej samej stronie po aktualizacji danych.Referencje API:
https://datatables.net/reference/api/clear ()
https://datatables.net/reference/api/rows.add ()
https://datatables.net/reference/api/draw ()
źródło
datatable.clear().rows.add(newDataArray).draw()
.). Od tego komentarza używam wersji 1.10.18Możesz użyć:
Jsfiddle
Aktualizacja. Obecna dokumentacja nie jest tak dobra, ale jeśli możesz używać starszych wersji, możesz odwołać się do starszej dokumentacji .
źródło
Musisz zniszczyć starą instancję tabeli danych, a następnie ponownie zainicjować tabelę danych
Najpierw sprawdź, czy istnieje instancja tabeli danych, używając $ .fn.dataTable.isDataTable
jeśli istnieje, zniszcz go, a następnie utwórz nową instancję, taką jak ta
źródło
Oto rozwiązanie dla starszych datatable 1.9.4
źródło
W moim przypadku nie używam wbudowanego interfejsu API Ajax do przesyłania Json do tabeli (jest to spowodowane pewnym formatowaniem, które było raczej trudne do zaimplementowania w wywołaniu zwrotnym renderowania datatable).
Moim rozwiązaniem było utworzenie zmiennej w zewnętrznym zakresie funkcji onload oraz funkcji obsługującej odświeżanie danych (
var table = null
na przykład).Następnie tworzę wystąpienie mojej tabeli w metodzie on load
i na koniec, w funkcji obsługującej refresh, wywołuję metodę clear () i destru (), pobieram dane do tabeli html i ponownie tworzę instancję datatable, na przykład:
Mam nadzieję, że ktoś uzna to za przydatne!
źródło