如何从可以由 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 插件实现服务器端处理?