如何从可以由 jQuery Datatables 插件解析的 CSV 格式化 json

Posted

技术标签:

【中文标题】如何从可以由 jQuery Datatables 插件解析的 CSV 格式化 json【英文标题】:How to format json from CSV that can be parsed by jQuery Datatables plugin 【发布时间】:2019-06-26 05:14:00 【问题描述】:

我正在使用 Rails 和 jQuery Datatables 插件,我试图在视图中显示来自 CSV 的数据。列数和行数因文件而异,仅依靠视图非常适合较小的文件,但任何较大的文件显然需要一段时间才能加载页面以及随后加载 jQuery 插件(我需要分页功能)。因此,我已更改为尝试通过其 ajax/serverSide 呈现功能将 td 值传递给 Datatables。我目前正在处理的问题是我不断收到“未捕获的类型错误:无法读取未定义的属性'长度'”的响应。

我目前正在使用此代码来解析 CSV 文件并从控制器发送:

json_hash =  CSV.parse(csv_file, headers: true)
json_hash = JSON.pretty_generate(json_hash.drop(1).map(&:to_h), object_nl: '', indent: ' ')
respond_to do |format|
  format.csv send_data csv_file, filename: scenario+".csv"
  format.json  render json: json_hash   
end

这是我设置数据表的方式:

var scene = $("#data-table-id").val();
var table = $('#data-viz-table').DataTable(
  searching: false,
  bServerSide: true,
  deferRender: true,
  scrollCollapse: true,
  bProcessing: true,
  sAjaxSource: '/data_model/export_csv/' + scene,
  order: [],
 "columnDefs": [
       "orderable": false, "targets": "_all" 
    ]
  );

我已经在网络选项卡中检查了响应,以及控制台记录数据,就格式而言,一切至少“看起来不错”,但我完全不知道我需要做什么才能获得要在 tbody 元素中显示的 td 项。

任何帮助将不胜感激。谢谢。

【问题讨论】:

【参考方案1】:

您是否检查过您在scene 中获得的价值。我认为您的 DataTable 需要一个数组,而是得到一个对象或 nil。在 ajax 定义中尝试类似 dataSrc:'' 的选项,这样 DataTable 就知道期待一个数组而不是一个对象,并确保您的 ajax 数据源(我猜在这种情况下是 var scene = $("#data-table-id").val();)不为零。

另外,请参阅 ajax options 了解最佳做法和更好的选择。

【讨论】:

感谢您抽出宝贵的时间回复,当我回到这个问题时,我会考虑您的建议,并让您知道它是如何解决的!

以上是关于如何从可以由 jQuery Datatables 插件解析的 CSV 格式化 json的主要内容,如果未能解决你的问题,请参考以下文章

我如何从 jQuery Datatables 调用 django 视图?

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

如何从 jQuery dataTables 中获取分页信息

如何使用 jQuery DataTables 插件实现服务器端处理?

如何使用 jQuery DataTables 从所有页面提交复选框

如何使用 jQuery DataTables 从数据库中显示特定数量的 HTML 表中的项目?