从GET请求中使用JSON数组填充Datatables

8
我知道有很多关于如何使用数据填充Jquery Datatables的答案和教程,但我总是遇到以下异常:

Uncaught TypeError: Cannot read property 'length' of undefined

我主要是后端开发人员,对编写客户端几乎没有经验,所以我想问一下,在以下示例中我做错了什么。

我有一个本地运行的服务器,公开了一个端点 /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的问题。欢迎提供任何帮助。
编辑:如果我请求数据然后将数据传递给datatables,则可以正常工作,代码示例如下:
$.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"
                } ]
            })
        }

我原本期望datatables内置了这个功能...


你是否检查控制台以确保AJAX请求正在工作并返回您期望的数据?如果您直接向Datatables提供对象,则您的代码将正常工作:http://jsfiddle.net/dzjjrLz2/ - Rory McCrossan
是的,我已经检查过了 - datatables 发出请求,状态为 200 OK 并返回正确的数据。 - Smajl
2个回答

15

dataSrc 设置为 ''。如文档所述:

通过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/


0
如果你的编码涉及到复杂的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"
        }]
    });
}); 

JSON 不是无效的 - 另一个服务正在使用它而没有任何问题。我只是无法让它与数据表一起工作。 - Smajl
那么我的问题的原因是什么?你能更新一下你的答案吗? - Smajl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接