web-dev-qa-db-ja.com

GETリクエストからJSON配列をデータテーブルに入力する

Jquery Datatables にデータを入力することについて多くの回答とチュートリアルがあることを知っていますが、常に次の例外が発生するようになっています。

Uncaught TypeError:undefinedのプロパティ 'length'を読み取れません

私は主にバックエンド開発者であり、クライアントの記述に関する経験がほとんどないかまったくないので、次の例で私が何が間違っているのかについてお聞きします。

サーバーをローカルで実行してエンドポイントを公開しています/destinationは、次の形式のJSON文字列で応答します。

[{
    "id": 1,
    "name": "London Heathrow",
    "lat": 51.470022,
    "lon": -0.454295
}, {
    "id": 2,
    "name": "London Gatwick",
    "lat": 51.153662,
    "lon": -0.182063
}, {
    "id": 3,
    "name": "Brussels Airport",
    "lat": 50.900999,
    "lon": 4.485574
}, {
    "id": 4,
    "name": "Moscow Vnukovo",
    "lat": 55.601099,
    "lon": 37.266456
}]

Datatablesプラグインを使用して、これらのデータをテーブルに表示したいと思います。これはテーブルコードです:

<table id="example" class="display" cellspacing="0" width="100%">
     <thead>
         <tr>
             <th>ID</th>
             <th>Name</th>
             <th>Lattitude</th>
             <th>Longitude</th>
         </tr>
        </thead>
 </table>

そしてそれを埋めるスクリプト:

$(document).ready(function() {
    $('#example').DataTable({
        "processing" : true,
        "ajax" : {
            "url" : ".../destination",
            "type" : "GET"
        },
        "columns" : [ {
            "data" : "id"
        }, {
            "data" : "name"
        }, {
            "data" : "lat"
        }, {
            "data" : "lon"
        }]
    });
});

上記のように、私はUncaught TypeError: Cannot read property 'length' of undefined。どんな助けでもありがたいです。

編集:それは私がデータを要求してから次のようにデータテーブルにデータを渡す場合に機能します:

$.ajax({
            url : '/AOS-project/destination',
            type : 'GET',
            dataType : 'json',
            success : function(data) {
                assignToEventsColumns(data);
            }
        });

        function assignToEventsColumns(data) {
            var table = $('#example').dataTable({
                "bAutoWidth" : false,
                "aaData" : data,
                "columns" : [ {
                    "data" : "id"
                }, {
                    "data" : "name"
                }, {
                    "data" : "lat"
                }, {
                    "data" : "lon"
                } ]
            })
        }

データテーブルにはこの機能が組み込まれていると思っていました...

8
Smajl

dataSrc''に設定します。 documentation の状態として:

Ajaxを介してファイルからJSONデータを取得し、dataSrcを使用してプレーンアレイからデータを読み取るではなくオブジェクトの配列:

$(document).ready(function() {
    $('#example').DataTable({
        "processing" : true,
        "ajax" : {
            "url" : "https://api.myjson.com/bins/14t4g",
            dataSrc : ''
        },
        "columns" : [ {
            "data" : "id"
        }, {
            "data" : "name"
        }, {
            "data" : "lat"
        }, {
            "data" : "lon"
        }]
    });
});

あなたのコードは機能します->http://jsfiddle.net/nzn5m6vL/

13
davidkonrad

ハードjsonを使用してコードを作成する場合は、試してみるよりも

$(document).ready(function() {
    $('#example').DataTable({
        processing : true,
        ajax: {
                url: "/api/venues",
                "type" : "GET"
                dataSrc: function (json) {
                    var obj = JSON.parse(json);
                    console.log(obj);
                    return obj;
                 }
            },
        columns : [ {
            data : "id"
        }, {
            data : "name"
        }, {
            data : "lat"
        }, {
            data : "lon"
        }]
    });
}); 
0