Estou usando o plugin jQuery datatables e carrego meus dados que carreguei no DOM na parte inferior da página e inicia o plugin desta maneira:
var myData = [
{
"id": 1,
"first_name": "John",
"last_name": "Doe"
}
];
$('#table').dataTable({
data: myData
columns: [
{ data: 'id' },
{ data: 'first_name' },
{ data: 'last_name' }
]
});
Agora. depois de realizar alguma ação, quero obter novos dados usando ajax (mas não a opção ajax construída em tabelas de dados - não me interpretem mal!) e atualizar a tabela com esses dados. Como posso fazer isso usando a API de tabelas de dados? A documentação é muito confusa e não consigo encontrar uma solução. Qualquer ajuda será muito apreciada. Obrigado.
Respostas:
SOLUÇÃO: (Atenção: esta solução é para datatables versão 1.10.4 (no momento) não versão legada).
ESCLARECIMENTO De acordo com a documentação da API (1.10.15), a API pode ser acessada de três maneiras:
A definição moderna de DataTables (caixa superior):
var datatable = $( selector ).DataTable();
A definição legada de DataTables (caixa do camelo inferior):
var datatable = $( selector ).dataTable().api();
Usando a
new
sintaxe.var datatable = new $.fn.dataTable.Api( selector );
Em seguida, carregue os dados assim:
Referências API:
https://datatables.net/reference/api/clear ()
https://datatables.net/reference/api/rows.add ()
https://datatables.net/reference/api/draw ()
fonte
datatable.clear().rows.add(newDataArray).draw()
). A partir deste comentário, estou usando a versão 1.10.18Você pode usar:
Jsfiddle
Atualizar. E sim, a documentação atual não é tão boa, mas se você estiver bem usando versões mais antigas, pode consultar a documentação legada .
fonte
Você precisa destruir a instância da tabela de dados antiga e, em seguida, reinicializar a tabela de dados
Primeiro, verifique se a instância da tabela de dados existe usando $ .fn.dataTable.isDataTable
se existir, destrua-o e crie uma nova instância como esta
fonte
Aqui está a solução para a tabela de dados legada 1.9.4
fonte
No meu caso, não estou usando a API ajax embutida para alimentar o Json na tabela (isso se deve a alguma formatação que era bastante difícil de implementar dentro do retorno de chamada de renderização da tabela de dados).
Minha solução foi criar a variável no escopo externo das funções onload e a função que lida com a atualização de dados (
var table = null
por exemplo).Então eu instanciai minha tabela no método de carregamento
e, finalmente, na função que lida com a atualização, eu invoco os métodos clear () e destroy (), busco os dados na tabela html e reinstancia a tabela de dados, como tal:
Espero que alguém ache isso útil!
fonte