我是 JSON 新手,我很难弄清楚如何编写我的脚本以便我可以使用数据表显示它
我的 JSON 数据如下所示
{ "success": true,
"data": {
"events": {
"My Event Name": {
"date": "january 1, 2017",
"place": "My Home",
"participants": ["Merly", "Sonia"],
"ideas": {
"this is an idea": {
"idea_detail": {
"deets": ["1.00", "1.00"]
},
"last_update": 1517977880
},
"another idea": {
"idea_detail": {
"deets": ["1.02", "12.00"]
},
"last_update": 1517977882
}
},
"info": {
"display_name": "Display",
"num": 2,
"date": 1517977921
}
},
}
}
}
经过研究,这就是我想出的:
$(document).ready( function() {
$('#example').DataTable({
'ajax' : {
"type" : "POST",
"url" : "<?php echo get_template_directory_uri();?>/trial.txt",
"dataSrc": function (json) {
var return_data = new Array();
var events = new Array();
var events = $.map(json.data.events, function(value, index) {
return value;
});
for(var i=0;i < events; i++){
return_data.push({
'event': json.data.events[i],
'date': json.data.events[i].date,
'place': json.data.events[i].place,
'participants': json.data.events[i].participants,
'ideas': json.data.events[i].ideas,
'detail': json.data.events[i].ideas[i].idea_detail[i],
'last_update': json.data.events[i].ideas.last_update,
'info': json.data.events[i].info
})
}
return return_data;
}
},
"columns" : [
{'data': 'event'},
{'data': 'date'},
{'data': 'place'},
{'data': 'participants'},
{'data': 'ideas'},
{'data': 'detail'},
{'data': 'last_update'},
{'data': 'info'} ]
})
} );
我可能做错了这一切,我希望有人能把我推向正确的方向。 提前谢谢你
Datatables 需要一个对象数组,看起来您正在尝试构建这些对象。 我的第一个问题是,您能否让服务器代码以正确的格式返回数据? 要使数据表在不加修改的情况下使用它,您需要像这样格式化它:
{ "success": true,
"data": {
"events": [
{ "event": "My Event Name",
"date": "january 1, 2017",
"place": "My Home",
"participants": ["Merly", "Sonia"],
"ideas": {
"this is an idea": {
"idea_detail": {
"deets": ["1.00", "1.00"]
},
"last_update": 1517977880
},
"another idea": {
"idea_detail": {
"deets": ["1.02", "12.00"]
},
"last_update": 1517977882
}
},
"info": {
"display_name": "Display",
"num": 2,
"date": 1517977921
}
},
.....next record.....
]
}
}
使用此结构,您可以将 ajax.dataSrc 设置为:dataSrc: "data.events"
。 您所要做的就是担心 如何显示ideas
.
根据您的要求,ideas
对象似乎是行详细信息的良好候选项。 当用户想要查看该对象时,可以动态分析该对象。
但是,我认为您目前问题的根源是:
for(var i=0;i < events; i++){
我想你想要这个:
for(var i=0;i < events.length; i++){
下一个领域是这样的:
'ideas': json.data.events[i].ideas,
'detail': json.data.events[i].ideas[i].idea_detail[i],
您需要一个单独的 for 循环来将每个ideas
处理成要显示的结构。.ideas[i].idea_detail[i]
会给你数组索引错误,因为i
并没有真正循环遍历对象的这些部分。
我建议暂时忽略ideas
部分,只显示基本数据。 一旦你得到它,那么我们就可以讨论ideas
。 需要知道您希望如何显示它,我们可以帮助您适当地解析它。