Как отформатировать json из CSV, который может быть проанализирован плагином jQuery Datatables - PullRequest
0 голосов
/ 01 февраля 2019

Я работаю с Rails и плагином jQuery Datatables, где я пытаюсь отобразить данные из CSV в представлении.Количество столбцов и строк варьируется от файла к файлу, и использование только одного представления отлично работает для файлов меньшего размера, но все, что больше, очевидно, займет некоторое время для загрузки страницы и последующего плагина jQuery (мне требуется функциональность разбиения на страницы).Поэтому я изменил попытку передачи значений td в Datatables с помощью его функций рендеринга ajax / serverSide.Проблема, с которой я сейчас имею дело, заключается в том, что я постоянно получаю ответ «Uncaught TypeError: Невозможно прочитать свойство 'length' с неопределенным значением".

В настоящее время я использую этот код для анализа 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

Вот как я установил DataTables:

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" }
    ]
  });

Я проверил во вкладке сети ответ, а также консоль регистрации данных, и все, по крайней мере, «хорошо выглядит» в части форматирования, но я полностью потерян, что мне нужно сделать, чтобы получить элементы td дляотобразить внутри элемента tbody.

Любая помощь будет принята с благодарностью.Спасибо.

1 Ответ

0 голосов
/ 02 февраля 2019

Вы проверили, какое значение вы получаете scene.Я думаю, что ваш DataTable ожидает массив, но вместо этого получает объект или ноль.Попробуйте что-то вроде dataSrc:'' в определении ajax, чтобы DataTable знал, что нужно ожидать массива вместо объекта, и убедитесь, что у вас источник данных ajax (var scene = $("#data-table-id").val(); в этом случае, я думаю) не ноль.

Кроме того, см. параметры ajax для получения информации о передовых методах и лучших вариантах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...