JavaScript, читання текстів

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

Доброго дня! Почав вчити Javascript, щоб перенести програми, написані на Java, на сайт. Читав, що з читанням файлів можуть бути проблеми.
Вичитав в інеті такий код:

<script>
function getXmlHttp() {
var xmlhttp;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
if (!xmlhttp && typeof XMLHttpRequest != "undefined") {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}

(function () {
var xmlhttp = getXmlHttp();
xmlhttp.open(’GET’, ’postup.ucoz.ua/_ld/0/info.txt, false);
xmlhttp.send(null);
if (xmlhttp.status == 200) {
var response = xmlhttp.responseText;
alert(response);
}
})();
</script>

Але, але, але.... Усі сайти зі своїми вибриками. Гугл не дає можливість використовувати деякі теги html. Шукав український безкоштовний хостінг. io.ua — туди неможливо завантажити текстовий файл. На webnode завантажив, але за посиланням файл не прочитується. На юкозі тільки вдалося прочитати й вивести в «алерт». Але наступного дня юкоз просить пароль, який я не вводив та й узагалі, хочеться обійтися без нього (про це не тут).
Словом питання: де краще створювати сайт, щоб вчити Javascript. Щоб дозволяв і html теги, і щоб текстові файли можна було завантажувати, і щоб сайт давав доступ до адреси завантажених файлів?

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

JavaScript взагалі призначений для того, щоб виконуватися на стороні клієнта. Тобто, не в тебе на сайті, а у клієнта в браузері. А для сайта краще... Java.

Взагалі-то хостинг — це лише комп′ютер під′єднаний до мережі. Нічого особливого з точки зору програмування. Тому все, що можна виконати власне на сайті із даними на сайті — треба там і виконувати. А якщо маються на увазі дані клієнта, що на його комп′ютері — бажано написати окрему програму під його систему, яка буде спілкуватися з твоїм сервером за потреби. Знову ж таки, не на JS.

Є лише одне виключення: коли тобі треба використати файл клієнта для авторизації. Але це дуже вузька область, якщо в тебе саме ця задача — так і скажи, в неї вже існує готове вирішення.

Дякую! Ні, всі дані у мене, я точно знаю, які файли. Ідея цікава про те, що все, що можна, робити на сайті. Але саме тут мені радили спочатку вчитися локально розробляти, а потім переносити на сайт. Як тоді краще?

Так, разробляти локально. Але це означає лише локально підняти серверний софт. Тобто, нічого тобі не заважає підняти базу даних чи аплікейшен сервер в себе на компі. Так майже усі роблять, за виключенням тих у кого на роботі підняті полігонні сервери.

Звичайно, це відхаває шматок оперативи. Але для початківця там багато не треба, я не думаю що для тебе проблема запустити додатково софта на гігабайт оперативи, який до речі можна пригасити на той час коли ним не користуєся.

Тобто, вчити зайву мову потрібно лише тоді, коли вона тобі потрібна. Бо як не потрібна, за рік ти її все одно забудеш.

Дякую!

Вже приблизно місяць досліджую тему, як прочитати зміст текстового файлу у змінну. Знаходжу чимало відповідей, але багато з них не працюють. Переважна більшість з відповідей в гуглі пов«язані з використанням важкої артилерії (Ajax, ActiveX). Зрештою, знайшов «легкі коди», але всі пропонують завантаження файлу через «input». А мені не потрібен інпут, я знаю назву файлу, знаю, що він лежить у проекті. Намагався підставити назву файлу, шлях до файлу — нічого не виходило.

function readSingleFile(e) {
    var file = e.target.files[0];
    if (!file) {
        alert('All!');
        return;
    }
    var reader = new FileReader();
    reader.onload = function (e) {
        var contents = e.target.result;
        displayContents(contents);
    };
	file = new File('new.txt');
    reader.readAsText(file);
}

function displayContents(contents) {
    var element = document.getElementById('file-content');
    element.innerHTML = contents;
}

document.getElementById('file-input')
    .addEventListener('change', readSingleFile, false);

HTML:

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Concordance</title>
    <input type="file" id="file-input"/>
    <h3>Contents of the file:</h3>
    <pre></pre>
    <script src="readF.js"></script>
</head>
<body>

</body>
</html>

Зрештою вичитав, що в JS файли запускаються на стороні клієнта. Схильний вірити, що це правда. А як бути з файлами, які становлять частину проекту? Я точно знаю назву файлів. Може, js не передбачає за задумом використання файлів? Якщо одним рядком можна зчитати зміст файлу в форму:

<iframe src="text.txt"></iframe>

Чому не можна його зчитати в змінну одним рядком? Чи просто про це не пишуть, чи я просто не знайшов?

Коли прочитав в гуглі сотню різних непрямих відповідей на поставлене питання, склалося враження, що файли і javscript — це щось непоєднуване, як той оксюморон: «біла троянда і чорна жаба».

Дякую заздалегідь за відповідь.

learn.javascript.ru/...o#что-не-умеет-javascript

JavaScript не может читать/записывать произвольные файлы на жесткий диск, копировать их или вызывать программы. Он не имеет прямого доступа к операционной системе.

Современные браузеры могут работать с файлами, но эта возможность ограничена специально выделенной директорией — “песочницей”. Возможности по доступу к устройствам также прорабатываются в современных стандартах и частично доступны в некоторых браузерах.

файли і javscript — це щось непоєднуване, як той оксюморон: “біла троянда і чорна жаба”.
ajax-запрос отправляем, получаем в ответ JSON или XML и с ним работаем.

Спасибо! Файлы на жестком диске только пока разрабатываю локально. Потом будут на сайте. Спасибо за ответ, я понимаю, что, наверное, это сложно. И прошу прощения за наивность вопросов: все-таки: где хранится абсолютный путь, выбранный через

<input type="file" id="file-input"/>
; 2) где хранится текст, который загружается в форму iframe src="text.txt"></iframe>
<input type="file" id="file-input"/>
document.getElementById('file-input').files
но там вы можете получить только имя, размер, тип и дату изменения. Содержимое файла без его загрузки на сервер из JS не прочитать.

Насчет iframe — для него строится отдельный DOM-документ, доступный через:

window.frames[0].document 
Но таким образом читать текстовые файлы — не лучшая идея.
Вообще, что именно вам нужно сделать?
— если надо загрузить файл на сервер — используйте input. Подробнее — читайте «PHP 5 в подлиннике», глава 43.
— если нужно достать данные — храните их в формате JSON и получайте с помощью ajax-запроса.

При разработке на локальной системе — нужно поднять локальный сервер (например, browsersync) и ходить на определенный URL. Например, ваше приложение работает на http://localhost:3000, файл можете отдавать по http://localhost:3000/data.json

А читать файлы с диска JS не может из соображений безопасности. Об этом по ссылке, что я давал, понятно написано.

Спасибо! Эх... Пишу для себя. Не готовлю к собеседованиям. Сначала джава. Потом пришлось под андроид. Теперь начал js. А, выходит, и php не помешает.

cd && mkdir wannaKnowHtml && cd wannaKnowHtml && echo '<!DOCTYPE html><html><head><title>Page Title</title></head><body><script type="text/javascript">alert("hello w");</script></body></html>' > 1.html && open 1.html

Дякую! Довелося поміркувати, поставити екранування, але все вийшло, окрім останньої команди:
open не является внутренней или внешней командой

на osx является. можете просто открыть файл двойным кликом.
но по большому счету я это писал к тому, что вам амазоны и прочее не надо. надо сначала локально все попробовать

Спасибо! Сервлет, как я понимаю, требует сервера, если испоьзовать то, что есть на Java. А Javascript — сервер не нужен. Да?

для отработки javascript нужен интерпретатор (движок)
для сервлета — контейнер сервлетов.

Если я правильно вас понял — есть java приложение, которое надо сделать общедоступным. Мое мнение — если круг потенциальных пользователей узок (можно предположить что это ваши студенты) и есть возможность выделить отдельную машину под сервер — servlets или что-то в этом роде вам в помощь. Или же переписать все на РНР (или что там сейчас на шаровых хостингах).

но я думаю вам лучше перефразировать свой вопрос чтобы получить вменяемый ответ.

Да, спасибо, уже была отдельная тема. В основном говорили, что без Javascript обойтись очень сложно. Вот я и решил переписать, только не php, a Javascript.

Дякую!

кстати, увидел ниже ваш комментарий ниже +

щоб перенести програми, написані на Java

вам скорее не html надо читать, а servlets/jsp (ну или какой-то mvc)

Дякую!

А вообще зачем для JS сайт поднимать?

Спасибо! Амазон попробую.
Зачем сайт? А я, к сожалению, не знаю другого способа обеспечить публичный круглосуточный доступ к программе, кроме как на сайте.

Коментар порушує правила спільноти і видалений модераторами.

Дякую!

Спасибо!

Bluehost — 3.95 $ в місяць і ніяких проблем! Можете погуглити щодо нього, почитати коментарі багатьох веб програмістів!!! Зараз на ньому більше 2млн. сайтів зареєстровано!

Дякую!

Если только фронт — Github Pages, но придется билдить локально.

Если нет потребности работать с файловой системой на сервере — Heroku наше всё. Если есть — все равно они + AWS S3 (первый год для новых клиентов — бесплатно. Есть ограничения на ресурсы, но на побаловаться хватит с головой).

DigitalOcean не бесплатен, но $5/месяц за вполне резвый хостинг — очень ок.

Спасибо! Рассмотрю.

ActiveXObject
Ви це серйозно?!

Практикуватися можна тут: jsfiddle.net, codepen.io, jsbin.com/?html,css,js,output
Залишається Вам лень дізнатися, на який з цих можна додати текстовий файл та як до нього дістатися.

Дякую!

Якщо якась особлива серверна частина геть не потрібна та немає обов’язковості у віддаленному розміщенні файлів, то розгорни веб-сервер локально. Наприклад, www.usbwebserver.net/en Взагалі, можна обійтися, для початку, локальним файлом — відкриваеш у браузері і поготів.

Дякую! Ідея приваблива. А що, тоді мій комп буде сервером і має бути ввімкнений постійно?

Еммм... Ні, комп буде «сервером» тільки коли увімкнений і тільки коли запущено usbwebserver, а «веб-сайт» буде доступний тільки локально. Тобто ззовні веб-сайт не буде доступним.

Дякую, але саме для того і вчу Джаваскрип, оскільки на Джаві під Віндоус уже все працює. Треба, щоб до програми був публічний доступ.

Ну, так коли навчишся, зможеш перенести куди завгодно. А тренуєшся на локальному сервері, не зв’язаний необхідністю дозавантажувати файл на віддалений сайт після кожного виправлення. Перевіряеш працездатність все одно через браузер.
Нє, ну то питання смаку, звичайно :)

для JavaScript сервер не нужен. Он работает из браузера. Достаточно создать файл .html
если нужен сервер, то можно установить node.js — прописать небольшой скрипт и сервер поднят

Дякую!

Дякую! Справді непогано. Цілий Гіг безкоштовно.

Більше схоже на питання для stackoverflow

Дякую!

Підписатись на коментарі