DataTables 将源数组包含在 JSON“数据”属性中

Posted

技术标签:

【中文标题】DataTables 将源数组包含在 JSON“数据”属性中【英文标题】:DataTables enclose source array into JSON 'data' property 【发布时间】:2019-11-18 09:35:25 【问题描述】:

我正在尝试使用通过 jQuery ajax GET 请求获得的数据创建一个数据表。 GET 请求返回格式中的所有对象

[
    "id": "88776",
    "employee_name": "JohnhmO",
    "employee_salary": "13973",
    "employee_age": "19",
    "profile_image": ""
,

    "id": "88778",
    "employee_name": "jbmvy",
    "employee_salary": "123",
    "employee_age": "23",
    "profile_image": ""
]

我需要将源数组包含在 JSON 'data' 属性中,以便数据表可以读取它。

我尝试过解析为 JSON。我试过unshift。

var dataSet = '';
$.ajax(
    url: 'http://dummy.restapiexample.com/api/v1/employees',
    type: 'GET',
    datatype: 'json'
).done(function (data) 
    console.log(data);
    dataSet = data;
)
function unshiftFunc(dataSet) 
    dataSet.unshift('data:');

console.log(dataSet)

我正在寻找的是这个:


    "data": [
        "id": "88776",
        "employee_name": "JohnhmO",
        "employee_salary": "13973",
        "employee_age": "19",
        "profile_image": ""
    ,
    
        "id": "88778",
        "employee_name": "jbmvy",
        "employee_salary": "123",
        "employee_age": "23",
        "profile_image": ""
    ]

【问题讨论】:

What I'm looking for is this: 这不是有效的 JSON。 JSON 无论如何都不相关;您将要解析 JSON 字符串并最终得到一个javascript 数组。您不能在数组的开头添加标签;这是无意义的语法。 【参考方案1】:

您可能的意思是将返回的数组放入一个对象中,并以属性名称data 为键。在这种情况下,只需创建一个对象,并将您的数据分配给 data 属性。

.done(function(data)
   dataSet =  data: data ;
)

顺便说一下,console.log(dataSet) 将返回 undefined,因为 $.ajax 是异步的。您必须在 done 的回调中执行此操作,才能知道 AJAX 解析后 dataSet 的样子。

【讨论】:

虽然这是一个完全有效的 jQuery 答案,但从 DataTables API 的角度来看是不合适的。如果 OP 继续他目前的方法,他将不得不清除/销毁 DataTable 以刷新它(这是一种性能浪费)。此外,如果他尝试实现某些功能,他可能会遇到各种 AJAX 问题,并导致一些关键的 DataTables API 方法无效。 相反ajax 选项应建议使用正确的dataSrc 值(请参阅我的answer)。【参考方案2】:

如果您使用 ajax 选项而不是 external $.ajax() 调用,您可以保持 JSON 原样并仍然成功填充 DataTables,这可能会让您遇到不同类型的问题:

$('table').DataTable(
   ...
   ajax: 
      url: 'http://dummy.restapiexample.com/api/v1/employees',
      type: 'GET',
      dataSrc: ''
   
);

选项dataSrc: ''indicates,您的源数据是未包含在任何特定属性中的对象数组。

【讨论】:

啊,好吧,约瑟夫在下面的评论是有道理的,但我知道这会怎样弄乱桌子。效果很好,谢谢!【参考方案3】:

您始终可以使用Array.concat() 以您想要的方式添加内容。

data = ["data"].concat(data);

【讨论】:

以上是关于DataTables 将源数组包含在 JSON“数据”属性中的主要内容,如果未能解决你的问题,请参考以下文章

如果名称包含点,如何在 dataTables 列初始化中获取 JSON 对象值?

如何替换 jQuery DataTables 中的数据数组

jQuery DataTables 呈现列数据

当数据源是一个数组时,jQuery DataTables刷新网格

如何计算位于 BigQuery 表中的 json 数组中的对象数?

当数据源是数组时,jQuery DataTables 刷新网格