多个数据表可以从同一个网址获取数据吗?

时间:2015-09-08 11:31:26

标签: jquery datatables

是否可以在一个视图中有两个指向同一个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();
        }
});

1 个答案:

答案 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();        
});