2016-04-28 2 views
5

У меня на моем веб-сервере сценарий JS, который я хочу, чтобы читать файлы. Моя файловая система выглядит так:Чтение файла на стороне сервера с использованием JavaScript

> Root 
index.html 
read.js 
> files 
    file.txt 

В этом примере, файл «file.txt» будет содержать простое слово «Hello»

С помощью JavaScript, я хочу, чтобы иметь возможность сделать функцию, например:

function read (path) { 
    //Stuff to read the file with specified path 
    var content = //whatever the content is 
    return content; 
} 

А потом быть в состоянии назвать его:

var file = read("/files/file.txt") 

А потом, когда я

alert(file) 

Он выскочит с/предупредит вас о «Hello», содержание file.txt.

Есть ли способ, которым я мог бы это сделать?

ответ

2

Что вы ищете, это XMLHttpRequest.

+0

Вы могли бы рассказать/показать мне, как использовать XMLHttpRequest для достижения этого? –

+0

Буквально первый пример кода на https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest - это почти то, о чем вы просите. Просто замените URL своим. –

0

Это не так просто, как кажется, и вам придется делать некоторые исследования на сервере и на клиенте.

Вы не можете читать данные на стороне сервера через Javascript, если у вас нет подключения к серверу. Независимо от того, какой код Javascript, который работает в браузере клиента, останется в браузере, даже если оба они запускаются на одном компьютере. Вам нужно, чтобы клиент (в данном случае, веб-сайт html + javascript) общался с сервером.

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

Попробуйте использовать статические файлы с NGINX или, возможно, что-то вроде NodeJS, в зависимости от того, что соответствует вашим потребностям. Оттуда создайте конечную точку GET, с которой ваш Javascript будет подключаться через XMLHttpRequest (например, @MattW.).

0

Это очень простая задача, если вы используете JQuery. В приведенном ниже примере будет выполняться запрос HTTP GET (с использованием XMLHttpRequest.as, упомянутый выше), и поместит содержимое в объект HTML DOM с идентификатором «результата», , Он также выдает окно предупреждения после завершения загрузки.

$("#result").load("files/file.txt", function() { 
    alert("Load was performed."); 
}); 
0

Вы хотите использовать XMLHttpRequest, как предложил Габриэль.

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

Вот пример, который я дразнил для вас:

<span id="placeholder"></span> 
 
<script> 
 
    var xhr = new XMLHttpRequest(); 
 
    xhr.onreadystatechange = function() { 
 
     if (xhr.readyState == 4 && xhr.status == 200) { 
 
      document.getElementById('placeholder').innerHTML = xhr.responseText; 
 
     } 
 
    } 
 
    xhr.open('GET', 'test.html'); 
 
    xhr.send(); 
 
</script>

+0

Смогу ли я установить переменную в контент так же, как я мог бы установить innterHTML #placeholder? –

+0

Да, присоедините его к объекту 'window'. 'window.myVar = xhr.responseText' –

+1

Предполагается, что файл file.txt фактически служит чем-то. Нет никакого способа получить доступ к файлу XHR, если он даже не открывается в «внешний мир», – SamuelN

2

Вот веб-страница образец для вас:

http://sealevel.info/test_file_read.html

Вот Javascript код:

// Synchronously read a text file from the web server with Ajax 
// 
// The filePath is relative to the web page folder. 
// Example: myStuff = loadFile("Chuuk_data.txt"); 
// 
// You can also pass a full URL, like http://sealevel.info/Chuuk1_data.json, but there 
// might be Access-Control-Allow-Origin issues. I found it works okay in Firefox, Edge, 
// or Opera, and works in IE 11 if the server is configured properly, but in Chrome it only 
// works if the domains exactly match (and note that "xyz.com" & "www.xyz.com" don't match). 
// Otherwise Chrome reports an error: 
// 
// No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://sealevel.info' is therefore not allowed access. 
// 
// That happens even when "Access-Control-Allow-Origin *" is configured in .htaccess, 
// and even though I verified the headers returned (you can use a header-checker site like 
// http://www.webconfs.com/http-header-check.php to check it). I think it's a Chrome bug. 
function loadFile(filePath) { 
    var result = null; 
    var xmlhttp = new XMLHttpRequest(); 
    xmlhttp.open("GET", filePath, false); 
    xmlhttp.send(); 
    if (xmlhttp.status==200) { 
    result = xmlhttp.responseText; 
    } 
    return result; 
} 
Смежные вопросы