将JSON对象与不使用Datatables的数组一起使用

时间:2016-11-30 03:38:43

标签: 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',
    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"
    }, 
              ],
        });

问题是我的表返回“表格中没有数据”。我确定我的对象的格式有问题,但我无法弄清楚要改变什么。

谢谢!

2 个答案:

答案 0 :(得分:1)

您的数据结构是否合适? 您的数据看起来像[&#34; Safeway&#34;,&#34; Kroger Pharmacy&#34;],价格:[58.14,65.45,66.76]}

您可能想要[{药房:&#34; Walmart&#34;,价格:58.14},{药房:&#34; Safeway&#34;,价格:65.45},{药房:&#34; Kroger Pharmacy& #34;,价格: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;
    }

我用这个测试了数据:

            var drugtable = $("#drug_datatable").DataTable({
            "data": final_data,
            columns: [{ data: "pharmacy" }, {data:"price"}]
        });

答案 1 :(得分:0)

我实际上无法测试这段代码,因为我无法从源代码中获取数据,但基于我们的讨论,这是我最好的选择。

SignTool