是否可以在一个视图中有两个指向同一个Ajax网址的数据表?目前我不得不把它分成两个不同的电话,但我希望通过一个电话获取我的数据。
我现在如何接听电话:
var table1;
var table2;
if (!$.fn.DataTable.fnIsDataTable('#table1')) {
table1 = $("#table1").DataTable({
"iDisplayLength": 4,
"dom": "ftp",
"ajax": {
"url": "@Html.Raw(@Url.Action("Action1", "Controller", new { @id = @Model.ID}))",
"dataSrc": "list1"
},..});
if (!$.fn.DataTable.fnIsDataTable('#table2')) {
table2 = $("#table2").DataTable({
"iDisplayLength": 4,
"dom": "ftp",
"ajax": {
"url": "@Html.Raw(@Url.Action("Action2", "Controller", new { @id = @Model.ID}))",
"dataSrc": "list2"
},..});
但我希望ajax url只是一个调用,并从返回的数据中选择dataSrc。
有点像这样(伪代码):
var table1;
var table2;
var url = "@Html.Raw(@Url.Action("Action1", "Controller", new { @id = @Model.ID}))";
if (!$.fn.DataTable.fnIsDataTable('#table1')) {
table1 = $("#table1").DataTable({
"iDisplayLength": 4,
"dom": "ftp",
"ajax": {
"url": url,
"dataSrc": "list1"
},..});
if (!$.fn.DataTable.fnIsDataTable('#table2')) {
table2 = $("#table2").DataTable({
"iDisplayLength": 4,
"dom": "ftp",
"ajax": {
"url": url,
"dataSrc": "list2"
},..});
这可能吗?还有其他选择吗?
编辑:
对于像我这样的人,他们喜欢"尝试获取数据"和"没有找到数据" ajax调用上的消息。
首先在sEmptyTable中设置默认消息
"oLanguage": {
"sEmptyTable": "Looking for records, please wait."
},
在getJson调用中,当表返回空时,操纵此字符串以显示新消息。
$.getJSON("@Html.Raw(@Url.Action("Action1", "Controller", new {id = @Model.ID}))", function (json) {
if (json.list1.length > 0) { table1.rows.add(json.list1).draw(); }
if (json.list2.length > 0) { table2.rows.add(json.list2).draw(); }
if (json.list1.length == 0) {
table1.context[0].oLanguage.sEmptyTable = "No records found.";
table1.draw();
}
if (json.list2.length == 0) {
table2.context[0].oLanguage.sEmptyTable = "No records found.";
table2.draw();
}
});
答案 0 :(得分:2)
您可以对两个表使用相同的URL,如下所示,请参阅this jsFiddle进行演示。
var table1 = $('#example1').DataTable({
ajax: 'https://api.myjson.com/bins/qgcu'
});
var table2 = $('#example2').DataTable({
ajax: 'https://api.myjson.com/bins/qgcu'
});
但是,为了避免发出两个请求,更好的方法是获取一次数据并稍后将其添加到相应的表中,如下所示,请参阅this jsFiddle进行演示。
var table1 = $('#example1').DataTable();
var table2 = $('#example2').DataTable();
$.getJSON('https://api.myjson.com/bins/qgcu', function(json){
table1.rows.add(json.data).draw();
table2.rows.add(json.data).draw();
});