新しい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

SOLUTION: (注意:このソリューションは、DataTableのバージョン1.10.4(現時点では)ないレガシー版のためです)。

明確化パーAPIドキュメント(1.10.15)は、APIは3つの方法でアクセスすることができます。

  1. DataTablesの最新の定義(キャメルの大文字):

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

  2. DataTablesの従来の定義(ラクダの小文字):

    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

ボタンコントロールを使用して1つの列を追加する方法
ajinkya

30

以下を使用できます。

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

Jsfiddle

更新。そして、はい、現在のドキュメントはそれほど良くありませんが、古いバージョンを使用しても問題ない場合は、レガシードキュメントを参照できます


はい、そうですが、私は最新バージョンのデータテーブルを使用しています。とにかく、私は解決策を見つけ、私の質問を更新しました。関心をお寄せいただきありがとうございます。)
インディ

1
@CookieMan、編集内容を削除して回答として投稿してください。その後、承認済みとしてマークします。
レポーター

このソリューションはページ
分割

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

これは最近のバージョンで動作します(コメントの日付を考慮してください)。ビカスありがとうございます!
テルモ

これでうまくいきました。しかし、なぜこれらすべての例を使用できるのかわかりません。vardatatable = $(selector).DataTable(); var datatable = $(selector).dataTable()。api(); var datatable = new $ .fn.dataTable.Api(selector); しかし、.row()。add()を追加しても機能しません。
フェルナンドパルマ

4

私の場合、組み込みのajax apiを使用してJsonをテーブルにフィードしていません(これは、データテーブルのレンダーコールバック内に実装するのがかなり難しい書式が原因です)。

私の解決策は、onload関数の外部スコープで変数を作成し、データの更新を処理する関数(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 2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.