drtsd7864 2014-11-27 10:24
浏览 22
已采纳

将数据加载到我不知道列的数据表中

I am creating a datatable by fetching data from database using AJAX response.

I am getting the following JSON data:

[
    {
        "id": "11105",
        "name": "Gummy Drop (iPhone, Free, ROW except CN, 72.3MB, w"
    },
    {
        "id": "11107",
        "name": "Gummy Drop (iPad, Free, ROW except CN, 72.3MB, w/ "
    },
    {
        "id": "4274",
        "name": "Z-Redirect Non-Targeted Traffic Dragon City Mobile"
    },
    {
        "id": "6484",
        "name": "Z-Redirect Non-Targeted Traffic Dragon City Mobile"
    }
]

The issue is, I may not know what data will be coming from AJAX response.

So I am extracting the keys of the JSON array so as to create the header, in which I am successful in doing so.

Here is my code:

$('#load').click(function()
    {
        var v = $('#drp_v').val();
        var cnt = $('#drp_cnt').val();
        var ctg = $('#drp_ctg').val();
        alert("version :"+v+" category :"+ctg+" country :"+cnt);
        $.post("ajax.php",{'version':v,'category':ctg,'country':cnt,'func':'show_datatable'},
                        function(data)
                        {
                            var aColumns = [];
                            var columns = [];
                            for(var i = 0; i < data.length; i++) 
                            {
                                if(i>0)
                                    break;
                                keycolumns = Object.keys(data[i]); 
                                for(j = 0; j < keycolumns.length; j++)
                                {
                                    alert(keycolumns[j]);
                                    if($.inArray(keycolumns[j],aColumns.sTitle)<=0)
                                    {
                                        aColumns.push({sTitle: keycolumns[j]}) //Checks if
                                        columns.push(keycolumns[j]) //Checks if
                                    }                                  
                                }

                            }

                            var oTable = $('#jsontable').dataTable({
                                "columns":aColumns,
                                "sDom": 'T<"clear">lfrtip',
                                    "oTableTools": {
                                        "aButtons": [
                                            {
                                                    "sExtends": "csv",
                                                    "sButtonText": "CSV",
                                             }
                                        ]
                                    }
                            });
                            oTable.fnClearTable();
                            for(var i = 0; i < data.length; i++) 
                            {
                                for(var c = 0; c < columns.length; c++) 
                                {
                                    oTable.fnAddData([
                                            data[i].columns[c]]); 
                                }
                            }
                        },'json');
    });

As you can see, var columns = []; actually contains the key of the JSON array I am getting. So the value of var columns is like this:

['id','name','description'];

So if we assume that id, name and description are three keys, then instead of using this code:

for(var i = 0; i < data.length; i++) 
 {
    oTable.fnAddData([
                      data[i].id,
                      data[i].name,
                      data[i].description]); 
}

I have used this code

for(var i = 0; i < data.length; i++) 
 {
   for(var c = 0; c < columns.length; c++) 
    {
        oTable.fnAddData([
                          data[i].columns[c]]); 
    }
}

so that the data can be loaded as dynamic key values that are stored in var columns.

But I think I made some mistake. Where have I gone wrong?

  • 写回答

2条回答 默认 最新

  • dtfbj24048 2014-11-27 10:44
    关注

    Use this code :

    var row = []
    for(var i = 0; i < data.length; i++) {
        for(var c = 0; c < columns.length; c++) {
                row.push( data[i][columns[c]] ) ;
        }
        oTable.fnAddData(row);
        row = [];
    } 
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 matlab有限元法求解梁带有若干弹簧质量系统的固有频率
  • ¥15 找一个网络防御专家,外包的
  • ¥100 能不能让两张不同的图片md5值一样,(有尝)
  • ¥15 informer代码训练自己的数据集,改参数怎么改
  • ¥15 请看一下,学校实验要求,我需要具体代码
  • ¥50 pc微信3.6.0.18不能登陆 有偿解决问题
  • ¥20 MATLAB绘制两隐函数曲面的交线
  • ¥15 求TYPCE母转母转接头24PIN线路板图
  • ¥100 国外网络搭建,有偿交流
  • ¥15 高价求中通快递查询接口