如何获取ajax响应数组的键以构建数据表的头?

时间:2014-11-27 07:18:46

标签: javascript jquery ajax json datatable

我有一个$.post查询,我从ajax响应中检索json数据。问题是我想在数据表中加载数据,并且需要动态创建表的标题。

我的json数据格式为:

[{"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"}]

大家都可以看到,这两个键是idname。我想获得两个密钥并用作标题列,但我无法这样做。

以下是代码:

$(document).ready(function() {
    window.prettyPrint() && prettyPrint();


    $('#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 = [{ sTitle: "Week"}, { sTitle: "Winkelformule" }];
                            var oTable = $('#jsontable').dataTable({
                                "columns":aColumns,
                                "sDom": 'T<"clear">lfrtip',
                                    "oTableTools": {

                                        "aButtons": [


                                             {
                                                    "sExtends": "csv",
                                                    "sButtonText": "CSV",

                                             }
                                        ]
                                    }

                            });
                            oTable.fnClearTable();
                            alert(data);
                            for(var i = 0; i < data.length; i++) 
                            {
                                 oTable.fnAddData([
                                            data[i].id,
                                            data[i].name
                                                   ]);                                      
                            } // End For
                        },'json');
    });
});

你可以看到这一行:

var aColumns = [{ sTitle: "Week"}, { sTitle: "Winkelformule" }];正在创建<thead>

现在我的两个问题是:

a)我想在这里使用密钥,以便thead可以是动态的。

b)其次,您可以看到我在ajax调用时初始化数据表。这意味着每次调用ajax时,都会初始化数据表。我想消除它。我希望数据表初始化一次,但每次激活ajax调用时都会创建<thead>。但我只知道在初始化数据表时创建<thead>

1 个答案:

答案 0 :(得分:2)

Object.keys可能就是你要找的东西。

response = $.post(YOUR_AJAX_PAAGE)
aColumns = [{ sTitle: "Week"}, { sTitle: "Winkelformule" }]; 
registerredKeys = [];
for(i = 0; i<response.length; i++){
      keycolumns = Object.keys(response[i]); //Get keys of each object
      for(j = 0; j < keycolumns.length; j++){
          if($.inArray({sTitle: keycolumns[j]},registerredKeys)<=0){
               aColumns.push({sTitle: keycolumns[j]}) //Checks if 
               registerredKeys.push( keycolumns[j]);
          }
      }
}

然后渲染aColumns。解决问题a。对于问题b你可能需要制作你的json响应,这样你就可以获得所有的密钥,否则你最终会初始化thead over over overagain,因为你不知道所有的数据。您可以保留运行列表以查看是否已注册新列。 (将PreviousKeys公开并在上面的代码之后运行。

if(Object.toJson(registerredKeys) === PreviousKeys){
     //Ignore 
}else{
   PreviousKeys = Object.toJson(registerredKeys)
   //Render new thead
}