Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Спортивная программа fitplotter (js) (https://javascript.ru/forum/project/81934-sportivnaya-programma-fitplotter-js.html)

karaul 24.02.2021 18:10

Здорово, спасибо большое voraa, рони

На 80% стало ясно что делать В качестве упражнения хочу взять кнопки отсюда и файл ajax
https://datatables.net/examples/ajax...ta_source.html
всё это прикрутить его к примеры рони и склеить с кодом voraa

А то ломал головы все эти дни.

Форум не позволяет выдавать кредиты подряд, так бы еще добавил плюсиков

Общение - великая вещь

voraa 24.02.2021 18:13

Цитата:

Сообщение от karaul
В качестве упражнения хочу взять кнопки отсюда и файл ajax

ajax не работает с локальными файлами. Только с сервером.
Если бы можно было с локальными, то и не надо бы было со script возиться.

karaul 24.02.2021 18:44

Я имел в виду текстовое содержание файла Ajax на вкладке скопировать на диск для вашего примера сскриптом и способ вставить кнопки в ряд

karaul 24.02.2021 21:27

Цитата:

Сообщение от voraa (Сообщение 534032)
Но для внешних файлов набросал такой примерчик

Всё заработало, спасибо. Внутрь file.dat можно сразу положить массив c полями как у БД (такой массив я хотел стибрить по сслылке с вкладки Αjax выше), этот массив разобрать на таблицу

А сам файл готовить отдельной утилитой из командной строки, сканируя директорию и собирая в file.dat имена файлов или просто в текстовом редакторе

karaul 25.02.2021 18:31

Сделал другой вариант. Чтобы читать локальные файлы надо скрипт класть в раздел <head>
<head>
	<script src=./main.js></script>
</head>

<body>

<input id="read_table" type="file" value='' style="padding: 0px; size: 120px" /> 

</body>

а потроха скрипта упаковать в функцию

document.addEventListener('DOMContentLoaded', function () {

var fReader = new FileReader();
  var readtable = document.getElementById('read_table');
  
  var filename, data, headers;
  
  readtable.onchange = function (e) {
   var file = this.files[0];
   //console.log(file);
   filename = file.name;
   fReader.readAsText(file);
  }
 
  fReader.onload = function (e) {
	var text = e.target.result;
...
  }

})


работающий пример с такой упаковкой
https://github.com/gfmoore/BackFitCl...ileanalyser.js
В этом примере разборка бинарного файла, но логика та же

Другой пример здесь
https://www.js-tutorials.com/javascr...ascript-html5/
http://js-tutorials.com/demos/read_csv_javascript_demo/
В этом примере много мусора, но главный принцип такой же - упаковать скрипт в функцию. (Интересно, в описании про мусор пишут а про упаковку скрипта в функцию нет. Когда весь Интернет просто криком исходит - как в простом js и html читать локальные файлы)

Остались бантики - стили, форматирование таблицы, прикручивание кнопки для вызова поля с графиками и картой

Интересно, что структурно решение выглядит так же как на питоне

Логика везде одинаковая - здравый смысл - а синтаксис может быть какой угодно

voraa 25.02.2021 21:59

Цитата:

Сообщение от karaul
но главный принцип такой же - упаковать скрипт в функцию.

Я не понял, что вы под этим подразумеваете. Если упаковку в
document.addEventListener('DOMContentLoaded', function () {
то это совершенно не обязательно. Можно и без этого
<head>
</head>
 
<body>
 
<input id="read_table" type="file" value='' style="padding: 0px; size: 120px" />
<script>
var fReader = new FileReader();
  var readtable = document.getElementById('read_table');
   
  var filename, data, headers;
   
  readtable.onchange = function (e) {
   var file = this.files[0];
   //console.log(file);
   filename = file.name;
   fReader.readAsText(file);
  }
  
  fReader.onload = function (e) {
    var text = e.target.result;
...
  }
</script>
</body>

Сработает точно так же

Чтение файла через <input type=file> - это обычный способ. Только пользователь должен каждый раз указывать файл. И не получится прочитать файл по имени, указанному где то в программе или какой-нибудь таблице.

karaul 25.02.2021 22:23

voraa,

Вы правы, действительно в вашем коде файл читается, я проверил.

Когда я писал fitplotter -- ссылка в певом сообщении темы -- у меня в начале постоянно вылезала ошибка нечтения. Возможно из-за того что в теле скрипта был вызов другого скрипта с диска, который занимается разборкой двоичного файла. Заработало только после упаковки в ф-цию.

voraa 25.02.2021 22:35

Просто всякие document.getElementById('read_table');
нормально срабатывают только тогда, когда браузер уже распарсил HTML текст и знает, что это за элемент с id='read_table'.
Когда мы помещаем скрипт в конце body, все элементы уже известны и DOM дерево построено.
Если поместить этот скрипт вначале, то это функция не сработает, т.к этого элемента еще нет.
Но document.addEventListener('DOMContentLoaded', function () {})
говорит - выполни эту функцию, когда произойдет событие "Содержимое DOM готово", т.е все распарсено, все элементы известны.

karaul 25.02.2021 23:14

Цитата:

Сообщение от voraa (Сообщение 534073)
не получится прочитать файл по имени, указанному где то в программе или какой-нибудь таблице.

Cейчас у меня в таблице в каждой строке находятся кнопки, по нажатию на кнопку должен читаться и разбираться на кирпичи двоичный файл с именем указанным в строке. Сама функция для чтения еще прицеплена. Я хотел передавать имя файла из строки таблицы в окно с формой для графиков. В этой форме есть <input type=file>, я намеревался на вход этого контроля записывать имя файла и включать чтение.

Будет ли способ описанный выше работать при однократном нажатии на простую кнопку в внешней таблице без диалога с пользователем?

Или вместо простой кнопки в строку таблицы надо прописывать обязательно <input type=file> чтобы юзер обязательно сам нажимал на input ? И после нажатия input всегда появляется диалог? В моем случае диалог не нужен потому что имя файла и путь к нему уже известны, можно читать сразу.

voraa 25.02.2021 23:38

Цитата:

Сообщение от karaul
Или вместо простой кнопки в строку таблицы надо прописывать обязательно <input type=file> чтобы юзер обязательно сам нажимал на input ? И после нажатия input всегда появляется диалог?

Только так. Никакого другого способа задать имя файла в input нет.
Иначе скрипты читали бы любые файлы на компьютере пользователя, и отправляли бы их куда-нибудь.


Часовой пояс GMT +3, время: 09:05.