将 Ajax 与 jQuery DataTables 结合使用时,如何确定如何处理返回的数据?

2023-11-29

像许多其他人一样,我查看类似问题的各种答案,在网上搜索示例等,但除非我碰巧找到我遇到的几乎相同的情况,否则我无法弄清楚如何让 DataTable 填充阿贾克斯呼叫。我认为如果有人能够解释所发生的步骤以及如何使用 DataTables 的 Ajax 调用的各种参数来根据返回的方式获取正确形式的数据,将会很有帮助。

例如:

json returned from get_all_accounts.php

{"accounts":{"account":[{"accountid":"2066","email":"Master (Blank) Defaults Acct","fullname":"Test","account_status":"Active","create_date":"2\/19\/2010 2:58:12 PM","last_login":"2\/19\/2010 3:03:43 PM","subscription_level":"Gold","license_type":"Test\/Free","group_name":"Default Accounts"},{"accountid":"2169","email":"[email protected]"......}]}}

现在,在网页中,我有:

$(document).ready(function() {
    oTable = $('#users').DataTable({
    processing: true,
    bStateSave: true,
    ajax: {
        url: "./get_all_accounts.php",
                        dataType: "JSON",
        dataSrc: ""
    },
    columns: [
        { data: "accountid", width: "5%" },
        { data:  "email" , width: "25%" },
        { data:  "fullname" },
        { data:  "group_name" },
        { data: "subscription_level" },
        { data: "account_status" },
        { data: "license_type" },
        { data: "create_date" }
    ]
    });

我已经尝试了 dataSrc 的各种操作,例如“accounts”、“accountid”、“accounts:account”。我无法更改传入的数据。我相信这是有效的 json。如何描述返回数据的形式?我对另一个返回的数据源执行相同的操作:

{"data":[{"0":"55","id":"55","1":"2020-01... 和 javascript:

... 数据源:“数据” }, 列: [ { 数据:“id”,宽度:“5%”}, { 数据:“电子邮件”,宽度:“25%”}, ...

完美地处理它。我能看到的唯一区别是,在这种情况下,我们有 {data:[{ row data },{row data}]),而在问题一中,还有一层结构,即。

    {accounts:{account:[{row data},{row data} ...

一般来说,人们如何处理这些情况?


简答

对于你的具体问题,你非常接近dataSrc: "accounts:account"。相反,它需要是dataSrc: "accounts.account"- 使用点而不是冒号。这是标准的 JavaScript 点分对象表示法,用于向下导航 JSON 结构的各个级别。

So:

ajax: {
  url: "./get_all_accounts.php",
  dataType: "JSON", // not actually needed - will be inferred.
  dataSrc: "accounts.account"
},

更长的答案

当 DataTables 通过 ajax 调用接收 JSON 对象时,它需要 JSON 包含一个数组。数组中的每一项都需要代表一行数据(或者至少是创建一行的原材料)。

DataTables 将自动为您处理对此数组的迭代 - 但它可能需要您的一些帮助才能知道在 JSON 中的何处找到此数组。

ajax 调用接收到的可能 JSON 结构的一些示例:

包含其他对象数组的对象:

{ "data": [ {...},{...},... ] }

包含数组数组的对象:

{ "data": [ [...],[...],... ] }

在这两种情况下,数组都有一个名称。在这种情况下,名称是data.

默认情况下,这就是 DataTables 所期望的:它假定数组的顶级名称为“data”,因此这是行迭代的起点。

如果数组的名称不是data,那么这就是需要使用ajax的地方dataSrc选项,告诉 DataTables 数组的实际名称是什么:

{ "myTableData": [ {...},{...},... ] }
$('#example').dataTable( {
  "ajax": {
    "url": "whatever",
    "dataSrc": "myTableData"
  }
} );

但是,如果 JSON 如下所示怎么办:

[ {...},{...},... ]

或者像这样:

[ [...],[...],... ]

在这些情况下,没有名字,所以dataSrc选项需要反映:

$('#example').dataTable( {
  "ajax": {
    "url": "whatever",
    "dataSrc": ""
  }
} );

对于您的情况,JSON 如下所示:

{
    "accounts": {
        "account": [{
            "accountid": "2066",
            "email": "Master (Blank) Defaults Acct",
            "fullname": "Test",
            "account_status": "Active",
            "create_date": "2\/19\/2010 2:58:12 PM",
            "last_login": "2\/19\/2010 3:03:43 PM",
            "subscription_level": "Gold",
            "license_type": "Test\/Free",
            "group_name": "Default Accounts"
        }, {
            "accountid": "2169",
            "email": "[email protected]"
        }]
    }
}

是的,它包含一个数组,但该数组位于accounts.account。这使用标准 JavaScript 点分对象表示法从 JSON 的入口点导航到数组的位置。因此dataSrc选项必须反映:

$('#example').dataTable( {
  "ajax": {
    "url": "whatever",
    "dataSrc": "accounts.account"
  }
} );

现在,您可以使用每个对象中的每个名称/值对columns.data选项 - 就像你在问题中所做的那样:

columns: [
  { data: "accountid", width: "5%" },
  { data: "email" , width: "25%" },
  { data: "fullname" },
  { data: "group_name" },
  { data: "subscription_level" },
  { data: "account_status" },
  { data: "license_type" },
  { data: "create_date" }
]

嵌套行数据

只是为了进一步继承“点对象表示法”的想法......

除了主数据数组可能嵌套之外,您还可以在每行数据内嵌套数据 - 例如:

{
  "name": "Tiger Nixon",
  "hr": {
    "position": "System Architect",
    "salary": "$3,120",
    "start_date": "2011/04/25"
  },
  "contact": [
    "Edinburgh",
    "5421"
  ]
}

在这种情况下,我们可以使用相同的点方法来访问嵌套列数据:

"columns": [
  { "data": "name" },
  { "data": "hr.position" },
  { "data": "contact.0" },
  { "data": "contact.1" },
  { "data": "hr.start_date" },
  { "data": "hr.salary" }
]

I stole官方文档中的最后一个示例。

看看Ajax 源数据页面以获取更多示例。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 Ajax 与 jQuery DataTables 结合使用时,如何确定如何处理返回的数据? 的相关文章

随机推荐

  • 在 Symfony2 上通过外部 API 配置用户身份验证时出现问题

    我在验证新 Symfony2 应用程序的用户身份时遇到问题 该应用程序通过 API 获取所有信息 因此不使用数据库 当用户进入登录页面时 他在登录表单中输入用户名和密码 然后 我必须使用 API 调用来验证他的身份 如果不是用户 则此 AP
  • 当用户分享 Facebook 链接时更新数据库

    用户在我的网站中共享链接后是否可以更新数据库 例如 如果他们分享链接 他们的帐户将获得一些积分 我怎样才能确保他们真正分享 Facebook 的链接 而不仅仅是点击分享然后关闭弹出窗口 我对 facebook 不熟悉 刚才尝试 google
  • Snakemake 无法处理很长的命令行?

    这是一个很奇怪的问题 当我的 input 中指定的rule部分是 input 有超过 500 个文件 snakemake 刚刚退出并显示消息 one of the commands exited with non zero exit cod
  • 如何创建一个 Mailto Share 按钮,该按钮打开一个窗口,可以在其中输入要发送到的电子邮件地址

    我一直在互联网上搜索以了解如何创建mailto共享按钮将打开一个新窗口 用户可以在其中输入他选择发送到的电子邮件地址 我附上了一组连续的图像作为操作示例 这其中有什么技巧呢 为什么我找不到任何有关如何编写此类代码的信息 堆栈溢出上也绝对找不
  • 如何阻止Savon向soap.body添加前缀

    这就是我创建客户端的方式 client Savon Client new do wsdl document my document wsdl endpoint my endpoint end 这就是我得到回复的方式 response cli
  • 将 PHP 数组传递给函数?

    我有以下代码 params array api user gt user api key gt pass to gt email protected subject gt testing from curl html gt testing
  • 如何更改 JAX-RS 应用程序中的 Jackson 版本 (WebSphere Liberty)

    我正在将 JAX RS 应用程序从 WebSphere 8 0 迁移到 WebSphere Liberty 8 5 5 在WebSphere 8 0 中 Jackson 由WebSphere 提供 我可以找到jackson core asl
  • 从 read 调用中得到负一

    我使用 SQL Developer 连接到具有只读访问权限的数据库 这是 TNS 连接 我使用 tnsnames ora 转发端口脚本和 SQL Developer 过去 有时在连接时会收到错误消息 从 read 调用中得到负一 供应商代码
  • 当通过启动器中的图标按下启动时,应用程序完全重新启动

    我正在尝试制作我的第一个 Android 应用程序的发布版本 以发送给一些测试人员 然而 我遇到了一个问题 当您退出应用程序 然后通过其图标启动它重新进入它时 它会重新启动整个应用程序 而不是返回到之前的位置 即使您退出后立即重新进入 也会
  • 如果未使用 CloseHandle 正确关闭,则重新打开串行端口会失败

    我正在 Windows 上使用 USB 设备 该设备被视为虚拟串行端口 我可以使用 CreateFile 和 ReadFile 函数与设备进行通信 但在某些情况下 我的应用程序不会调用 CloseHandle 当我的应用程序在开发中崩溃时
  • 混合模式程序集是针对版本“v1.1.4322”构建的

    我在 c net 4 0 应用程序中包含了一个 directX 播放器 该应用程序包含在此处 答案2 问题是 当我尝试初始化对象 即 Player mPlayer new Player 时 会发生此错误 混合模式程序集是针对运行时版本 v1
  • 画布被跨源数据污染

    我正在从我可以信任的第三方网站加载动态 jpeg 我试图getImageData 但浏览器 Chrome 23 0 抱怨 Unable to get image data from canvas because the canvas has
  • 快速找到以2为底的对数的整数部分

    计算浮点数以 2 为底的对数的整数部分的有效方法是什么 就像是 N ceil log2 f or N floor log2 f 对于浮点数 f 我想这可以以某种方式非常有效地实现 因为人们可能只需要访问浮点指数 EDIT2 我主要不感兴趣精
  • 参与者数量为奇数的每周小组分配算法

    问题有一个循环解决方案我之前问过 它对于偶数的人来说效果很好 但是一旦你实现了算法并尝试了它们 这些建议似乎都不起作用 我已经尝试了很多变化并且 将最后一个与一大堆其他人分组 第二组最后一组 不同的组合 2和4到底行的最后一个 我认为这会给
  • 检索 Matplotlib 热图颜色

    我正在尝试检索 matplotlib 热图上每个单元格的颜色 该热图由imshow 功能 例如由magic function below import matplotlib pyplot as plt import numpy as np
  • 如何使用 javascript d3 打开 json 文件?

    我正在尝试使用 javascript 从 JSON 文件中提取元素 但是收到一条错误消息 指出它无法加载 JSON 文件 这就是我的代码的样子
  • 异步nodejs执行顺序

    processItem什么时候开始执行 是否在某些项目被推入队列后立即开始 或者 for 循环必须在队列中的第一项开始执行之前完成 var processItem function item callback console log ite
  • 将列插入 pandas 数据框

    设想 我有一段代码 可以将 Excel 工作表中的数据读取到数据框中 合并到一个数据框中 并执行一些清理过程 Issue 我试图使用 pd insert 将具有给定值的列添加到数据帧的开头 但每次运行此行时 数据帧都会从变量资源管理器中消失
  • 从 Facebook API 将数据插入 Meteor

    我按照给出的例子here从 FB Graph 中提取数据 到目前为止 我已经设法从 FB 中提取数据 但我不知道如何将其插入到 MongoDB 中 目前 Facebook 的数据呈现如下 data picture https photo j
  • 将 Ajax 与 jQuery DataTables 结合使用时,如何确定如何处理返回的数据?

    像许多其他人一样 我查看类似问题的各种答案 在网上搜索示例等 但除非我碰巧找到我遇到的几乎相同的情况 否则我无法弄清楚如何让 DataTable 填充阿贾克斯呼叫 我认为如果有人能够解释所发生的步骤以及如何使用 DataTables 的 A