чтение файла сервера с помощью javascript
у меня есть html-страница с использованием javascript, которая дает пользователю возможность читать и использовать свои собственные текстовые файлы со своего ПК. Но я хочу иметь пример файла на сервере, который пользователь может открыть одним нажатием кнопки. Я понятия не имею, как лучше всего открыть файл server. Я немного погуглил. (Я новичок в html и javascript, поэтому, возможно, мое понимание следующего неверно!). Я обнаружил, что javascript основан на клиенте, и открыть файл сервера не очень просто. Это выглядит как это проще всего использовать iframe (?). Поэтому я пытаюсь (первый тест-просто открыть его на загрузке веб-страницы) следующее. С КГР.bss в том же каталоге на сервере, что и моя html-страница:
<IFRAME SRC="kgr.bss" ID="myframe" onLoad="readFile();"> </IFRAME>
и (с file_inhoud, строки, определенные в другом месте)
function readFile() {
func="readFile=";
debug2("0");
var x=document.getElementById("myframe");
debug2("1");
var doc = x.contentDocument ? x.contentDocument : (x.contentWindow.document || x.document);
debug2("1a"+doc);
var file_inhoud=doc.document.body;
debug2("2:");
lines = file_inhoud.split("n");
debug2("3");
fileloaded();
debug2("4");
}
функция отладки показывает:
readFile=0//readFile=1//readFile=1a[object HTMLDocument]//
так заявление, которое останавливает программу:
var file_inhoud=doc.document.body;
что не так? Как правильно (или лучше) читать этот файл?
Примечание: I смотрите, чтобы файл считывался и отображался в кадре.
спасибо!
2 ответов
обычный способ получить текстовый файл (или любой другой ресурс на стороне сервера) - использовать AJAX. Вот пример того, как можно предупредить содержания текстового файла:
var xhr;
if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest();
} else if (window.ActiveXObject) {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
xhr.onreadystatechange = function(){alert(xhr.responseText);};
xhr.open("GET","kgr.bss"); //assuming kgr.bss is plaintext
xhr.send();
проблема с вашей конечной целью заключается в том, что традиционно невозможно использовать javascript для доступа к файловой системе клиента. Однако новый HTML5-файл API меняет это. Вы можете прочитать на нем здесь.
ваш лучший выбор, так как файл находится на вашем сервере, чтобы получить его через "ajax". Это означает асинхронный JavaScript и XML, но XML-часть является полностью необязательной, ее можно использовать со всеми типами контента (включая простой текст). (Если на то пошло, асинхронная часть также необязательна, но лучше всего придерживаться этого.)
вот основной пример запроса данных текстового файла с помощью ajax:
function getFileFromServer(url, doneCallback) {
var xhr;
xhr = new XMLHttpRequest();
xhr.onreadystatechange = handleStateChange;
xhr.open("GET", url, true);
xhr.send();
function handleStateChange() {
if (xhr.readyState === 4) {
doneCallback(xhr.status == 200 ? xhr.responseText : null);
}
}
}
вы бы назвали это как это:
getFileFromServer("path/to/file", function(text) {
if (text === null) {
// An error occurred
}
else {
// `text` is the file text
}
});
однако вышеизложенное несколько упрощено. Он будет работать с современными браузерами, но не с некоторыми старыми, где вам нужно обойти некоторые проблемы.
обновление: вы сказали в комментарии ниже, что используете jQuery. Если это так, вы можете использовать ajax
функции и получите преимущество обходных путей jQuery для некоторых несоответствий браузера:
$.ajax({
type: "GET",
url: "path/to/file",
success: function(text) {
// `text` is the file text
},
error: function() {
// An error occurred
}
});
Примечание:
Я нашел этот javascript основан на клиенте...
нет. Это миф. JavaScript-это просто язык программирования. Его можно использовать в браузерах, на серверах, на вашей рабочей станции и т. д. На самом деле JavaScript был изначально разработано для использования на сервере.
в наши дни наиболее распространенное использование (и ваш вариант использования) действительно в веб-браузерах на стороне клиента, но JavaScript не ограничивается клиентом в общем случае. И это имеет большое Возрождение на сервере и вообще, в другом месте.