Как обновить JQuery DataTables из Ajax Call [duplicate]

Конечно, есть много таких подходов, как синхронный запрос, обещание, но из моего опыта я думаю, что вы должны использовать подход обратного вызова. Естественно, что асинхронное поведение Javascript. Итак, ваш фрагмент кода можно переписать немного иначе:

function foo() {
    var result;

    $.ajax({
        url: '...',
        success: function(response) {
            myCallback(response);
        }
    });

    return result;
}

function myCallback(response) {
    // Does something.
}
61
задан covfefe 5 January 2015 в 15:20
поделиться

5 ответов

98
ответ дан Patrick Q 28 August 2018 в 22:21
поделиться

В моем случае я не использую встроенный ajax api для подачи Json в таблицу (это связано с некоторым форматированием, которое было довольно сложно реализовать внутри обратного вызова рендеринга datatable).

My решение заключалось в создании переменной во внешней области функций 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();
   }

Надеюсь, кто-то найдет это полезным!

3
ответ дан jorge cordero 28 August 2018 в 22:21
поделиться

Вам нужно уничтожить старый экземпляр таблицы данных, а затем повторно инициализировать таблицу данных

Сначала Проверьте, существует ли экземпляр таблицы данных с помощью $ .fn.dataTable.isDataTable

, если существует, затем уничтожить его, а затем создать новый экземпляр, подобный этому

    if ($.fn.dataTable.isDataTable('#dataTableExample')) {
        $('#dataTableExample').DataTable().destroy();
    }

    $('#dataTableExample').DataTable({
        responsive: true,
        destroy: true
    });
0
ответ дан Om Sharma 28 August 2018 в 22:21
поделиться

Вот решение для устаревшего 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);
0
ответ дан Vikas 28 August 2018 в 22:21
поделиться

Вы можете использовать:

$('#table').dataTable().fnClearTable();
$('#table').dataTable().fnAddData(myData2);

Jsfiddle

Обновить. И да, текущая документация не так хороша, но если вы используете старые версии, вы можете ссылаться на устаревшую документацию .

21
ответ дан Vladimirs 28 August 2018 в 22:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: