Як вручну оновити таблицю таблиць даних новими даними JSON


98

Я використовую таблиці даних jQuery плагіна і завантажую свої дані, які я завантажив у 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 таблиць даних? Документація дуже заплутана, і я не можу знайти рішення. Будь-яка допомога буде дуже вдячна. Дякую.


Як щодо видалення існуючого тіла та створення нового?
Репортер

Відповіді:


177

РІШЕННЯ: (Зверніть увагу: це рішення для версій 1.10.4 (на даний момент) не є застарілою версією).

ПОЯСНЕННЯ Відповідно до документації API (1.10.15), доступ до API може здійснюватися трьома способами:

  1. Сучасне визначення даних DataTables (верхній корпус верблюда):

    var datatable = $( selector ).DataTable();

  2. Спадкове визначення таблиць даних (нижній регістр верблюда):

    var datatable = $( selector ).dataTable().api();

  3. Використання newсинтаксису.

    var datatable = new $.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 ()


4
Це було занадто важко знайти, велике спасибі! Використовуючи це для збереження таблиці даних між оборотними поїздками сервера.
Даг,

Що стосується даних даних версії 1.9.4 Я зіткнувся з тією самою проблемою в цьому
Hardik Masalawala

4
Я просто хочу додати, що ви також можете ланцюжок методів (тобто datatable.clear().rows.add(newDataArray).draw()). Щодо цього коментаря, я використовую версію 1.10.18
Sal_Vader_808

як я можу додати один стовпець за допомогою кнопки управління
ajinkya

30

Ви можете використовувати:

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

Jsfiddle

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


Так, ви маєте рацію, але я використовую останню версію даних. У будь-якому випадку, я знайшов рішення і оновив своє запитання. Дякуємо за інтерес :)
Інді,

1
@CookieMan, видаліть свою редакцію та опублікуйте її як відповідь. Після цього позначте це як прийняте.
Репортер

це рішення не оновлює розділ сторінки,
Alok Deshwal,

8

Вам потрібно знищити старий екземпляр таблиці даних, а потім повторно ініціалізувати таблицю даних

Спочатку перевірте, чи існує екземпляр таблиці даних за допомогою $ .fn.dataTable.isDataTable

якщо існує, то знищити його, а потім створити такий примірник, як цей

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

    $('#dataTableExample').DataTable({
        responsive: true,
        destroy: true
    });

5

Ось рішення для застарілої таблиці даних 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);

Це працює для останньої версії (будь ласка, врахуйте дату коментаря). Дякую Вікасе!
Тельмо,

Це працювало для мене. Але я не розумію, чому я можу використовувати всі ці приклади: var datatable = $ (selector) .DataTable (); var datatable = $ (селектор) .dataTable (). api (); var datatable = новий $ .fn.dataTable.Api (селектор); Але при додаванні .row (). Add () не працює.
Фернандо Пальма

4

У моєму випадку я не використовую вбудований ajax api для подачі Json до таблиці (це пов'язано з деяким форматуванням, яке було досить складно реалізувати всередині зворотного виклику рендерингу таблиці даних).

Моє рішення полягало у створенні змінної у зовнішній області функцій завантаження та функції, яка обробляє оновлення даних ( var table = nullнаприклад,).

Тоді я інстанціюю свою таблицю методом навантаження

$(function () {
            //.... some code here
            table = $("#detailReportTable").DataTable();
            .... more code here
        });

і нарешті, у функції, яка обробляє оновлення, я викликаю метод clear () і знищення (), отримую дані в таблиці html і повторно створюю таблицю даних як таку:

function getOrderDetail() {
            table.clear();
            table.destroy();
            ...
            $.ajax({
             //.....api call here
            });
            ....
            table = $("#detailReportTable").DataTable();
   }

Сподіваюсь, комусь це стане в нагоді!


2
Знищення цілого столу на кожному переході є досить дорогим, і держава також втрачається. Вам слід розглянути прийняту відповідь, де зберігається стан таблиці.
nhaberl
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.