【问题标题】:Datatables not displaying the response数据表不显示响应
【发布时间】:2018-02-08 10:45:39
【问题描述】:

我正在尝试使用 AJAX 数据表从 api 获取数据,数据已成功检索并显示在网络选项卡中,但未在数据表中呈现

这是我的 AJAX 调用

"ajax": {
            "url": "https://api.tidex.com/api/3/info",
            "type":'POST',
            "dataSrc": "pairs",
    },
    columns: [
         { data: 'pairs' },
         { data: 'server_time' },
         { data: 'server_time' },
         { data: 'server_time' },
         { data: 'server_time' },
         { data: 'server_time' },
    ],
    columnDefs: [
       {
           "render": function (data, type, row) {
                return '<a href="">'+data+'</a>';

           }, "targets": 6
       },
    ]

我尝试以正常方式渲染它,但失败了,然后我尝试使用 columnDefs 渲染它,但也失败了。

【问题讨论】:

  • columnDefs 你有targets: 6。列号从 0 开始。您有 0 到 5 列。将目标值更改为 5。如果这没有帮助,则提供返回数据的示例(网络选项卡)并具体描述未正确呈现的内容。
  • 表格显示“表格中没有可用数据”没有任何错误,但在网络选项卡中我得到的响应是此链接“api.tidex.com/api/3/info

标签: jquery ajax datatables


【解决方案1】:

API 响应是一个对象集合或字典,对于 DataTables 是不可解析的。这是有道理的,因为您希望表数据按索引排序,而不是按诸如"doge_btc" 之类的名称排序。

因此,您必须将响应转换为对象数组。幸运的是,这相当简单,您可以在 dataSrc 回调中做到这一点:

var table = $('#example').DataTable({
   ajax: {
     url: "https://api.tidex.com/api/3/info",
     dataSrc: function(d) {
      var data = [];
      for (var item in d.pairs) {
         data.push(d.pairs[item])
      }
      return data
     }
   },
   columns: [
    { data: "decimal_places", title: "decimal_places" },
    { data: "min_price", title: "min_price" },
    { data: "max_price", title: "max_price" },
    { data: "min_amount", title: "min_amount" },
    { data: "max_amount", title: "max_amount" },
    { data: "min_total", title: "min_total" },
    { data: "hidden", title: "hidden" },
    { data: "fee", title: "fee" }
   ]
})  

就是这样 -> http://jsfiddle.net/wnoemmte/

【讨论】:

  • 好的解决方案+1。
【解决方案2】:

你的 JSON 看起来像这样:

{
    "server_time": 1518103107,
    "pairs": {
        "ltc_btc": {
            "decimal_places": 8,
            "min_price": 0.00000001,
            "max_price": 3.0,
            "min_amount": 0.001,
            "max_amount": 1000000.0,
            "min_total": 0.0001,
            "hidden": 0,
            "fee": 0.1
        },
        "eth_btc": {
            "decimal_places": 8,
            "min_price": 0.00000001,
            "max_price": 3.0,
            "min_amount": 0.001,
            "max_amount": 1000000.0,
            "min_total": 0.0001,
            "hidden": 0,
            "fee": 0.1
        },
        .......
        "bins_eth": {
            "decimal_places": 8,
            "min_price": 0.0000001,
            "max_price": 20.0,
            "min_amount": 0.001,
            "max_amount": 1000000.0,
            "min_total": 0.001,
            "hidden": 0,
            "fee": 0.1
        }
    }
}

虽然这是一种有效的 JSON 格式,但它不是有效的数据表格式。请参阅数据表Data docs 了解更多详情。

首先它需要一个对象数组,并且每一行对象都是一致的。你有这个:

"pairs": {
        "ltc_btc": {

然后这个:

        "eth_btc": {

据我所知,这不适用于数据表。 “ltc_btc”是一个名字还是什么?像这样的结构更适合数据表:

{
    "server_time": 1518103107,
    "pairs": [
        {
            "name": "ltc_btc",
            "decimal_places": 8,
            "min_price": 0.00000001,
            "max_price": 3.0,
            "min_amount": 0.001,
            "max_amount": 1000000.0,
            "min_total": 0.0001,
            "hidden": 0,
            "fee": 0.1
        },
            "name": "eth_btc",
            "decimal_places": 8,
            "min_price": 0.00000001,
            "max_price": 3.0,
            "min_amount": 0.001,
            "max_amount": 1000000.0,
            "min_total": 0.0001,
            "hidden": 0,
            "fee": 0.1
        },
        .......
            "name": "bins_eth",
            "decimal_places": 8,
            "min_price": 0.0000001,
            "max_price": 20.0,
            "min_amount": 0.001,
            "max_amount": 1000000.0,
            "min_total": 0.001,
            "hidden": 0,
            "fee": 0.1
        }
    ]
}

对象数组。然后你可以像这样定义你的列:

columns: [
     { data: 'name' },
     { data: 'min_price' },
     { data: 'max_price' },
     { data: 'min_amount' },
     { data: 'max_amount' },
     { data: 'hidden' },
],

或者你想显示的任何数据列。

【讨论】:

  • 是的,但 OP 无法更改 API 的工作方式。因此,他或她必须改为转换响应。
猜你喜欢
  • 2022-11-25
  • 2021-11-26
  • 1970-01-01
  • 2020-10-05
  • 1970-01-01
  • 2016-02-15
  • 2013-11-15
  • 2012-07-27
  • 1970-01-01
相关资源
最近更新 更多