Cách cập nhật thủ công bảng dữ liệu với dữ liệu JSON mới


98

Tôi đang sử dụng plugin jQuery datatables và tải dữ liệu của tôi mà tôi đã tải trong DOM ở cuối trang và khởi chạy plugin theo cách này:

var myData = [
    {
        "id": 1,
        "first_name": "John",
        "last_name": "Doe"
    }
];

$('#table').dataTable({
    data: myData
        columns: [
        { data: 'id' },
        { data: 'first_name' },
        { data: 'last_name' }
    ]
});

Hiện nay. sau khi thực hiện một số hành động, tôi muốn nhận dữ liệu mới bằng cách sử dụng ajax (nhưng không phải là tùy chọn ajax xây dựng trong các dữ liệu - đừng hiểu nhầm!) và cập nhật bảng với những dữ liệu này. Làm cách nào tôi có thể làm điều đó bằng cách sử dụng API dữ liệu? Tài liệu rất khó hiểu và tôi không thể tìm ra giải pháp. Bất kì sự trợ giúp nào cũng được đánh giá cao. Cảm ơn.


Làm thế nào về việc xóa thân bàn hiện có và tạo nó mới?
PV

Câu trả lời:


177

GIẢI PHÁP: (Lưu ý: giải pháp này dành cho dữ liệu phiên bản 1.10.4 (hiện tại) không phải phiên bản kế thừa).

Làm rõ Theo các tài liệu API (1.10.15), API có thể được truy cập ba cách:

  1. Định nghĩa hiện đại của DataTables (chữ hoa lạc đà trên):

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

  2. Định nghĩa kế thừa của DataTables (chữ hoa camel thấp hơn):

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

  3. Sử dụng newcú pháp.

    var datatable = new $.fn.dataTable.Api( selector );

Sau đó tải dữ liệu như sau:

$.get('myUrl', function(newDataArray) {
    datatable.clear();
    datatable.rows.add(newDataArray);
    datatable.draw();
});

Tham chiếu API:

https://datatables.net/reference/api/clear ()

https://datatables.net/reference/api/rows.add ()

https://datatables.net/reference/api/draw ()


4
Cái này quá khó tìm, cảm ơn nhiều! Sử dụng điều này để duy trì dữ liệu giữa các vòng quay của máy chủ.
Doug

Còn về phiên bản dữ liệu 1.9.4 thì sao? Tôi đang gặp phải vấn đề tương tự trong đó
Hardik Masalawala

4
Tôi chỉ muốn nói thêm rằng bạn cũng có thể xâu chuỗi các phương thức (tức là datatable.clear().rows.add(newDataArray).draw()). Theo nhận xét này, tôi đang sử dụng phiên bản 1.10.18
Sal_Vader_808

làm cách nào để thêm một cột bằng nút điều khiển
ajinkya

30

Bạn có thể dùng:

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

Jsfiddle

Cập nhật. Và có tài liệu hiện tại không quá tốt nhưng nếu bạn thấy ổn khi sử dụng các phiên bản cũ hơn, bạn có thể tham khảo tài liệu cũ .


Đúng, bạn nói đúng, nhưng tôi đang sử dụng phiên bản mới nhất của dữ liệu. Dù sao, tôi đã tìm thấy một giải pháp và cập nhật câu hỏi của mình. Cảm ơn sự quan tâm của bạn :)
Indy

1
@CookieMan, vui lòng xóa chỉnh sửa của bạn và đăng nó như một câu trả lời. Sau đó, đánh dấu nó là được chấp nhận.
PV

giải pháp này không được cập nhật phần pagination
Alok Deshwal

8

Bạn cần phải hủy phiên bản bảng dữ liệu cũ và sau đó khởi tạo lại bảng dữ liệu

Đầu tiên Kiểm tra xem cá thể bảng dữ liệu có tồn tại hay không bằng cách sử dụng $ .fn.dataTable.isDataTable

nếu tồn tại thì hãy phá hủy nó và sau đó tạo phiên bản mới như thế này

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

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

5

Đây là giải pháp cho dữ liệu kế thừa 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);

Điều này hoạt động cho phiên bản gần đây (xin vui lòng, xem xét ngày của nhận xét). Cảm ơn Vikas!
Telmo

Điều này đã làm việc cho tôi. Nhưng tôi không hiểu tại sao tôi có thể sử dụng tất cả các ví dụ này: var datatable = $ (selector) .DataTable (); var datatable = $ (selector) .dataTable (). api (); var datatable = new $ .fn.dataTable.Api (bộ chọn); Nhưng khi thêm .row (). Add () không hoạt động.
Fernando Palma

4

Trong trường hợp của tôi, tôi không sử dụng api ajax tích hợp sẵn để cung cấp Json vào bảng (điều này là do một số định dạng khá khó thực hiện bên trong lệnh gọi lại kết xuất của dữ liệu).

Giải pháp của tôi là tạo biến trong phạm vi bên ngoài của các hàm onload và hàm xử lý việc làm mới dữ liệu ( var table = nullví dụ:).

Sau đó, tôi khởi tạo bảng của mình trong phương thức tải

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

và cuối cùng, trong hàm xử lý làm mới, tôi gọi phương thức clear () và Dest (), tìm nạp dữ liệu vào bảng html và khởi tạo lại dữ liệu, chẳng hạn như:

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

Tôi hi vọng ai đó thấy nó hữu ích!


2
Phá hủy toàn bộ bảng ở mỗi lượt đi khá tốn kém và nhà nước cũng bị mất. Bạn nên xem xét câu trả lời được chấp nhận nơi trạng thái của bảng được lưu giữ.
nhaberl 16/03/18
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.