2016-04-11 3 views
0

Я хочу загрузить файл json-stringified в моем javascript. Javascript находится в html-файле, который загружается из локальной файловой системы. неЗагрузите файл 'server-side' с XMLHttpRequest в локальный файл html

Я попытался с помощью следующего кода:

var xhr = new XMLHttpRequest(); 
xhr.open('GET', fileName, true); 
xhr.responseType = 'blob'; 

xhr.onload = function(e) { 
    if (this.status == 200) { 
    // get binary data as a response 
    var blob = this.response; 
    alert("Yo"); 
    } 
}; 

Но пожары OnLoad событие только один раз, со статусом = 0, то больше не происходит.

Я попытался использовать как полный путь к файлу, так и локальный путь к файлу, например «/files/the_file.txt».

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

Кто-нибудь есть решение этой проблемы?

EDIT:

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

HTML:

<input type="file" id="FancyInputField" onchange="doIt();"> 

Javascript:

function doIt(){ 
    var selectedFile = document.getElementById('FancyInputField').files[0]; 

    reader = new FileReader(); 

    reader.onload = function (e) { 
     var output = reader.result;  
     var daObject = JSON.parse(output); 
    } 

    reader.readAsText(selectedFile); 
} 

Это также работает с локальной HTML-файл. (Нет локального сервера)

Мой вопрос стоит; Как читать файлы (файлы) без взаимодействия с пользователем? Файлы находятся в подпапке, где находится html-файл. Я могу без проблем загружать и показывать изображение из той же подпапки, с тегом <img>. .. Так почему так сложно загрузить текстовый файл?

ответ

2

Как читать файлы (файлы) без взаимодействия с пользователем?

Вы не можете. Эти файлы принадлежат пользователю, а не вашему веб-сайту. Вы не можете их читать.

я могу без нагрузки проблемы и показать изображение из той же подпапке, с <img> тегом

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

Так почему же так сложно загрузить текстовый файл?

  1. Отправить кому HTML-документ в электронной почте
  2. Наслаждайтесь JavaScript в нем зачерпнув файлы с жесткого диска и отправки их на сервер Джо Зло Хакера

Это только основные безопасности.

+0

Благодарим вас за ответ Quentin. Моя главная проблема здесь (с самого начала) заключалась в том, что я полагал, что браузер может видеть папку и подпапки html-файла как «локальный сервер», т. Е. В обход проверок безопасности. Теперь я вижу, насколько легко хакеру было бы рассказать кому-нибудь «просто поместить этот файл на свой рабочий стол и запустить его» .. :) – Snorvarg

+0

Я отмечаю это как ответ, но хотел бы упомянуть, что я думаю, что это проблема в любом случае, довольно сложно сделать загружаемое «приложение» в html + javascript в настоящее время ... – Snorvarg

0

Использование URL.createObjectURL(file), вместо ajax.

+0

спасибо. URL.createObjectURL (файл) ожидает, что файл будет объектом File, но у меня есть только путь к файлу. Есть ли способ создать объект File и передать его createObjectURL(), как вы предлагаете? (Я пробовал это: var file = File (fileName), но он дает исключение.) – Snorvarg