使用来自 GET 请求的 JSON 数组填充数据表
Populating Datatables with JSON array from GET request
我知道有很多关于使用数据填充 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 中显示这些数据。这是 table 代码:
<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
。感谢任何帮助。
编辑:如果我请求数据然后将数据传递给数据tables,它会起作用,如下所示:
$.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"
} ]
})
}
我期待数据table具有此功能...
如果你的编码工作很辛苦 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"
}]
});
});
将 dataSrc
设置为 ''
。正如 documentation 所述:
Get JSON data from a file via Ajax, using dataSrc to read data from a
plain array rather than an array in an object:
$(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/
我知道有很多关于使用数据填充 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 中显示这些数据。这是 table 代码:
<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
。感谢任何帮助。
编辑:如果我请求数据然后将数据传递给数据tables,它会起作用,如下所示:
$.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"
} ]
})
}
我期待数据table具有此功能...
如果你的编码工作很辛苦 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"
}]
});
});
将 dataSrc
设置为 ''
。正如 documentation 所述:
Get JSON data from a file via Ajax, using dataSrc to read data from a plain array rather than an array in an object:
$(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/