我有一个$.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"}]
大家都可以看到,这两个键是id
和name
。我想获得两个密钥并用作标题列,但我无法这样做。
以下是代码:
$(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>
。
答案 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
}