如何从可以由 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的主要内容,如果未能解决你的问题,请参考以下文章