Jquery 将JSON对象与不使用数据表的数组一起使用
我正在努力将JSON数据用于数据表。很抱歉设置了格式,但这是我在开发人员工具中得到的:Jquery 将JSON对象与不使用数据表的数组一起使用,jquery,arrays,json,object,datatables,Jquery,Arrays,Json,Object,Datatables,我正在努力将JSON数据用于数据表。很抱歉设置了格式,但这是我在开发人员工具中得到的: Object pharmacy:Array[3] 0:"Walmart" 1:"Safeway" 2:"Kroger Pharmacy" length:3 __proto__:Array[0] price: Array[3] 0:58.14 1:65.45 2:66.76 length:3 __proto__:Array[0] ... 我用这个来理解: $.ajax({ url: 'test.php
Object
pharmacy:Array[3]
0:"Walmart"
1:"Safeway"
2:"Kroger Pharmacy"
length:3
__proto__:Array[0]
price: Array[3]
0:58.14
1:65.45
2:66.76
length:3
__proto__:Array[0]
...
我用这个来理解:
$.ajax({
url: 'test.php',
type: 'POST',
dataType: 'JSON',
data: {
drug: picked_drug,
},
success: function(data) {
var all_data = JSON.parse(data);
final_data = all_data.data.price_detail;
console.log(final_data); //this outputs object above.
}
});
然后,我以如下方式渲染表:
var drugtable = $("#drug_datatable").DataTable({
"data": final_data,
"paging": true,
"dom": '<"top">Bt<"bottom"><"clear">',
"pageLength": 25,
"order": [
[0, "desc"]
],
"columns": [
{
"data": "pharmacy",
"searchable": false,
"width": "20%",
"className": "lang_body_2",
"title": "Attribute"
},
{
"data": "price",
"searchable": false,
"width": "20%",
"className": "lang_body_2",
"title": "Attribute"
},
],
});
var drugtable=$(“#druge_datatable”).datatable({
“数据”:最终数据,
“分页”:正确,
“dom”:“Bt”,
“页面长度”:25,
“命令”:[
[0,“描述”]
],
“栏目”:[
{
“数据”:“药房”,
“可搜索”:错误,
“宽度”:“20%”,
“类名”:“lang_body_2”,
“标题”:“属性”
},
{
“数据”:“价格”,
“可搜索”:错误,
“宽度”:“20%”,
“类名”:“lang_body_2”,
“标题”:“属性”
},
],
});
问题是我的表返回“表中没有可用数据”。我肯定我的对象的格式有问题,但我不知道要更改什么
谢谢 您的数据结构正确吗? 您的数据看起来像[“Safeway”,“Kroger Pharmacy”],价格:[58.14,65.45,66.76]} 你可能想要[{药房:“沃尔玛”,价格:58.14},{药房:“安全之路”,价格:65.45},{药房:“克罗格药房”,价格:66.76}] 这将使数据变得平坦
// simulated the return from ajax as i understand your data
function stuff () {
this.pharmacy = ["Walmart","Safeway", "Kroger Pharmacy"];
this.price = [58.14, 65.45, 66.76]
}
var list = new stuff();
// now flatening for datatables
var keys = Object.keys(list);
var listLen = list[keys[0]].length;
var final_data = [];
// create the list for data table
for (var i = 0; i < listLen; ++i) {
var item = {};
for (var j = 0; j < keys.length; ++j) {
item[keys[j]] = list[keys[j]][i];
}
final_data[final_data.length] = item;
}
我无法实际测试这段代码,因为我无法从源代码中获取数据,但根据我们的讨论,这是我的最佳选择
<script type="text/javascript">
// this flattens the data passed back by ajax
function flattenData(list) {
// now flatening for datatables
var keys = Object.keys(list);
var listLen = list[keys[0]].length;
var fd= [];
// create the list for data table
for (var i = 0; i < listLen; ++i) {
var item = {};
for (var j = 0; j < keys.length; ++j) {
item[keys[j]] = list[keys[j]][i];
}
fd[final_data.length] = item;
}
return fd;
}
// function is called from the success callback function to create the DataTable
function createTable(tableData) {
var drugtable = $("#drug_datatable").DataTable({
"data": tableData,
columns: [{ data: "pharmacy" }, { data: "price" }],
});
}
$(function ($) {
$.ajax({
url: 'test.php',
type: 'POST',
dataType: 'JSON',
data: {
drug: picked_drug,
},
success: function (data) {
var all_data = JSON.parse(data);
var final_data = flattenData(all_data.data.price_detail);
createTable(final_data)
console.log(final_data); //this outputs object above.
}
});
})
</script>
//这将使ajax传回的数据平坦化
功能数据(列表){
//现在,数据表正在变平
var keys=Object.keys(列表);
var listLen=列表[键[0]]。长度;
var-fd=[];
//创建数据表的列表
对于(变量i=0;i
是的……这正是我想要的……我正努力用一个语句来实现它。想法?所以你不能在数据源处更改数据,以使其平坦化?数据来自一个API,所以我只能尝试这样的方法:$.each(final_data,function(index,val){item={}item[index]=val;})代码>我有一个想法,但是重新创建itI需要几分钟的时间。我还没有测试datatable部分,还没有安装在我的开发环境中。我确实做了一些关于阵列同步的假设
<script type="text/javascript">
// this flattens the data passed back by ajax
function flattenData(list) {
// now flatening for datatables
var keys = Object.keys(list);
var listLen = list[keys[0]].length;
var fd= [];
// create the list for data table
for (var i = 0; i < listLen; ++i) {
var item = {};
for (var j = 0; j < keys.length; ++j) {
item[keys[j]] = list[keys[j]][i];
}
fd[final_data.length] = item;
}
return fd;
}
// function is called from the success callback function to create the DataTable
function createTable(tableData) {
var drugtable = $("#drug_datatable").DataTable({
"data": tableData,
columns: [{ data: "pharmacy" }, { data: "price" }],
});
}
$(function ($) {
$.ajax({
url: 'test.php',
type: 'POST',
dataType: 'JSON',
data: {
drug: picked_drug,
},
success: function (data) {
var all_data = JSON.parse(data);
var final_data = flattenData(all_data.data.price_detail);
createTable(final_data)
console.log(final_data); //this outputs object above.
}
});
})
</script>