【问题标题】:How to format json from CSV that can be parsed by jQuery Datatables plugin如何从可以由 jQuery Datatables 插件解析的 CSV 格式化 json
【发布时间】: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 项。

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

【问题讨论】:

    标签: ruby-on-rails json ruby csv datatables


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您抽出宝贵的时间回复,当我回到这个问题时,我会考虑您的建议,并让您知道它是如何解决的!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-01
    相关资源
    最近更新 更多