DataTables 隐藏数据源

Posted

技术标签:

【中文标题】DataTables 隐藏数据源【英文标题】:DataTables Hide Data Source 【发布时间】:2021-12-19 01:49:55 【问题描述】:

我有一个加载数据的 DataTables 表

$table.dataTable(
    ajax: 'path/to/getData.php',
);

getData.php 进行一些数据库调用并返回输出数组的json_encode(),DataTables 能够很好地解析它。

但是,如果有人要去http://mywebsite.com/path/to/getData.php,他们将能够看到所有原始 JSON 数据并可能将其抓取。

有没有办法阻止人们访问getData.php,除非它被 dataTables 调用?

我相当肯定这必须是对 PHP 代码的修改,因为任何人都可能通过 javascript 看到我的解决方法。

【问题讨论】:

您可以通过使用 html 源数据来避免在网页中使用 Ajax。使用 PHP 构建 <html> 表的内容,并从 DataTable 定义中删除 ajax 选项。可能有几种不同的方法可以做到这一点 - 但here is one。另见HTML (DOM) sourced data。最终用户一次只能访问一页数据 - 并且需要从 HTML 中抓取数据,而不是从 JSON 响应中获取所有数据。 我最初是这样做的,但我有大约 5000 行,并且 DataTables 需要一些时间来处理所有内容。进行 ajax 调用要快得多。 我喜欢你的解决方案。附带说明一下,如果您在问题中告诉我们您已经尝试过什么,这会有所帮助 - 我们不会建议您已经知道不合适的东西。 【参考方案1】:

我最终使用了$_SESSION 变量。

在包含表格的页面的开头,我设置了$_SESSION['secure'] = true;

在我的getData.php 文件中,我有:

if($_SESSION['secure']) 
    echo json_encode($output);
    $_SESSION['secure'] = false;

重置secure 会话变量。

【讨论】:

以上是关于DataTables 隐藏数据源的主要内容,如果未能解决你的问题,请参考以下文章

DataTables 隐藏/显示隐藏列按钮 CSS 样式

如何在 Jquery Datatables 中根据条件隐藏列?

PHP DataTables 隐藏多列

如何按 DataTables 中的隐藏列排序?

如何将第二个(隐藏)值添加到 datatables.net 中的单元格?

使用 CSS 隐藏行而不是使用 DataTables 删除节点