【问题标题】:Populating Datatables with JSON array from GET request使用来自 GET 请求的 JSON 数组填充数据表
【发布时间】:2015-10-27 08:01:42
【问题描述】:

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

未捕获的类型错误:无法读取未定义的属性“长度”

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

我有一个在本地运行的服务器公开一个端点 /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"
                } ]
            })
        }

我期待数据表具有此功能...

【问题讨论】:

  • 您是否检查过控制台以确保 AJAX 请求正常工作并返回您期望的数据?如果您直接将对象提供给 Datatables,那么您的代码可以正常工作:jsfiddle.net/dzjjrLz2
  • 是的,我已经检查过了 - 有来自数据表的请求返回正确的数据,状态为 200 OK

标签: javascript jquery json datatables-1.10


【解决方案1】:

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/

【讨论】:

    【解决方案2】:

    如果您使用硬 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 不是无效的 - 有另一个服务正在使用它而没有任何问题。我只是不能让它与数据表一起工作
    • 那么我的问题的原因是什么?请你更新你的答案吗?
    猜你喜欢
    • 2015-11-15
    • 1970-01-01
    • 2019-06-08
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    相关资源
    最近更新 更多