Как загрузить содержимое текстового файла в переменную javascript?
У меня есть текстовый файл в корень моего веб-приложения http://localhost/foo.txt и я хотел бы загрузить его в переменную в javascript.. в Groovy я бы сделал так:
def fileContents = 'http://localhost/foo.txt'.toURL().text;
println fileContents;
Как я могу получить аналогичный результат в JavaScript?
8 ответов:
XMLHttpRequest, т. е. AJAX, без XML.
точный способ, которым вы это делаете, зависит от того, какую структуру JavaScript вы используете, но если мы игнорируем проблемы совместимости, ваш код будет выглядеть примерно так:
var client = new XMLHttpRequest(); client.open('GET', '/foo.txt'); client.onreadystatechange = function() { alert(client.responseText); } client.send();Обычно говоря, однако, XMLHttpRequest не доступен на всех платформах, поэтому некоторые выдумки сделаны. Еще раз, лучше всего использовать фреймворк AJAX, такой как jQuery.
еще одно соображение: это будет работать только как долго, как Фу.txt находится в том же домене. Если он находится в другом домене, политики безопасности того же происхождения не позволят вам прочитать результат.
вот как я это сделал в jquery:
jQuery.get('http://localhost/foo.txt', function(data) { alert(data); });
Если вам нужна только постоянная строка из текстового файла, вы можете включить ее как JavaScript:
// This becomes the content of your foo.txt file let text = ` My test text goes here! `;<script src="foo.txt"></script> <script> console.log(text); </script>строка, загруженная из файла, становится доступной для JavaScript после загрузки. Символ ' (backtick) начинается и заканчивается a шаблон литерал, что позволяет использовать символы " и " в текстовом блоке.
этот подход хорошо работает, когда вы пытаетесь загрузить файл локально, так как хром не позволит AJAX по URL-адресам с
file://схема.
одна вещь, чтобы иметь в виду, что Javascript работает на клиенте, а не на сервере. Вы не можете действительно "загрузить файл" с сервера в JavaScript. Что происходит, так это то, что Javascript отправляет запрос на сервер, и сервер отправляет обратно содержимое запрошенного файла. Как Javascript получает содержимое? Для этого и существует функция обратного вызова. В случае Эдварда это
client.onreadystatechange = function() {и в случае danb, это
function(data) {эта функция вызывается всякий раз, когда данные приходят. Версия jQuery неявно использует Ajax, она просто упрощает кодирование, инкапсулируя этот код в библиотеке.
при работе с jQuery, вместо использования
jQuery.get, например,jQuery.get("foo.txt", undefined, function(data) { alert(data); }, "html").done(function() { alert("second success"); }).fail(function(jqXHR, textStatus) { alert(textStatus); }).always(function() { alert("finished"); });вы могли бы использовать
.loadчто дает вам гораздо более сжатой форме:$("#myelement").load("foo.txt");
.loadдает вам также возможность загружать частичные страницы, которые могут пригодиться, см. api.jquery.com/load/.
С Помощью Fetch:
fetch('http://localhost/foo.txt') .then(response => response.text()) .then((data) => { console.log(data) })
Это должно работать почти во всех браузерах:
var xhr=new XMLHttpRequest(); xhr.open("GET","https://12Me21.github.io/test.txt"); xhr.onload=function(){ console.log(xhr.responseText); } xhr.send();кроме того, есть новый
FetchAPI:fetch("https://12Me21.github.io/test.txt") .then( response => response.text() ) .then( text => console.log(text) )
Если ваш ввод был структурирован как XML, вы можете использовать . (Более подробная информация здесь, в quirksmode).
Если это не XML, и нет эквивалентной функции для импорта обычного текста, то вы можете открыть его в скрытом iframe, а затем прочитать содержимое оттуда.
Comments