새 JSON 데이터로 데이터 테이블 테이블을 수동으로 업데이트하는 방법


99

플러그인 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 옵션 빌드가 아닙니다-오해하지 마십시오!) 이러한 데이터로 테이블을 업데이트하고 싶습니다. Datatables API를 사용하여 어떻게 할 수 있습니까? 문서가 매우 혼란스럽고 해결책을 찾을 수 없습니다. 어떤 도움이라도 대단히 감사하겠습니다. 감사.


기존 테이블 본체를 삭제하고 새로 생성하는 것은 어떻습니까?
Reporter

답변:


178

솔루션 : (참고 :이 솔루션은 레거시 버전이 아닌 데이터 테이블 버전 1.10.4 (현재) 용입니다).

설명 사용자 단위 API 문서 (1.10.15)는 API는 세 가지 방법으로 액세스 할 수 있습니다 :

  1. DataTables의 현대적인 정의 (카멜 대문자) :

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

  2. DataTables의 레거시 정의 (lower camel case) :

    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();
});

draw(false)데이터 업데이트 후 동일한 페이지에 머무르는 데 사용 합니다.

API 참조 :

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

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

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


4
찾기가 너무 어려웠습니다. 감사합니다! 이것을 사용하여 서버 왕복 사이에 데이터 테이블을 유지합니다.
Doug

datatables 버전에 대한 어떤 1.9.4 내가 점에서 동일한 문제에 직면하고있다
Hardik Masalawala

5
메서드 (예 :)를 연결할 수도 있음을 추가하고 싶습니다 datatable.clear().rows.add(newDataArray).draw(). 이 댓글 현재 버전 1.10.18
Sal_Vader_808

버튼 컨트롤을 사용하여 하나의 열을 추가하는 방법
ajinkya

31

당신이 사용할 수있는:

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

Jsfiddle

최신 정보. 예, 현재 문서는 그다지 좋지 않지만 이전 버전을 사용해도 괜찮다면 레거시 문서를 참조 할 수 있습니다 .


예, 맞습니다.하지만 최신 버전의 데이터 테이블을 사용하고 있습니다. 어쨌든 해결책을 찾고 질문을 업데이트했습니다. 관심 :) 주셔서 감사합니다
인디

1
@CookieMan, 수정 사항을 제거하고 답변으로 게시하십시오. 그런 다음 수락 됨으로 표시하십시오.
기자

이 솔루션은 페이지 매김 섹션을 업데이트하지 않습니다
알록 Deshwal을

이것은 훌륭합니다. 감사합니다
Chris

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);

이것은 최신 버전에서 작동합니다 (댓글 날짜를 고려하십시오). 감사합니다 Vikas!
Telmo

이것은 나를 위해 일했습니다. 하지만이 모든 예제를 사용할 수있는 이유를 이해할 수 없습니다. var datatable = $ (selector) .DataTable (); var datatable = $ (selector) .dataTable (). api (); var datatable = new $ .fn.dataTable.Api (selector); 그러나 .row (). add ()를 추가하면 작동하지 않습니다.
Fernando Palma

4

제 경우에는 내장 된 ajax API를 사용하여 Json을 테이블에 공급하지 않습니다 (이는 데이터 테이블의 렌더링 콜백 내부에서 구현하기가 다소 어려웠던 일부 형식 지정 때문입니다).

내 솔루션은 온로드 함수의 외부 범위와 데이터 새로 고침을 처리하는 함수 (var table = null 예 .

그런 다음 on load 메서드에서 테이블을 인스턴스화합니다.

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

마지막으로 새로 고침을 처리하는 함수에서 clear () 및 destroy () 메서드를 호출하고 데이터를 html 테이블로 가져온 다음 데이터 테이블을 다시 인스턴스화합니다.

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

누군가 이것이 유용하다고 생각하기를 바랍니다!


2
모든 왕복에서 전체 테이블을 파괴하는 것은 비용이 많이 들고 상태도 손실됩니다. 테이블의 상태가 유지되는 곳에서 허용되는 답변을 고려해야합니다.
nhaberl
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.