2017-01-11 4 views
3

Я пытаюсь ссылаться на файл, расположенный в родительской папке, с помощью d3.csv, и я не могу найти правильный синтаксис.d3.csv не удалось открыть один каталог

Моя структура папок выглядит следующим образом:

root 
└── js 
    ├── data.csv 
    └── myGraph.js 

В папке JS У меня есть myGraph.js. В этом файле у меня есть следующий фрагмент кода:

d3.csv("data.csv", function(error, data) { 
    data.forEach(function(d) { 
    d.date = parseDate(d.date); 
    d.close = +d.close; 
}); 

Если поместить мой data.csv внутри JS папки все работает отлично. Тем не менее, если перенести data.csv файл в корневой папке

root 
├── data.csv 
└── js  
    └── myGraph.js 

и изменить код для этого, то он перестает работать:

d3.csv("/../data.csv", function(error, data) 

Я также попытался:

d3.csv("../data.csv", function(error, data) 

Кто-нибудь знает, что я делаю неправильно и что такое правильный синтаксис? Большое спасибо.

+0

Какой сервер вы используете для локального использования файлов? – HamsterHuey

+0

Хорошая точка. Я не использую локальный сервер - может быть, это и есть причина? Я просто храню все файлы на своей локальной машине Windows. Я ожидал, что, поскольку окна позволяют использовать .. в командной строке, он также будет работать с javascript - я предполагаю, что это проблема. Если вы ответите, сказав, что это может работать только с установленным сервером, я буду отмечать ответ правильно, спасибо. –

ответ

3

Роберт - Есть несколько вещей, чтобы работать через, чтобы получить эту работу:

1) Из-за модели безопасности браузера, вы не можете напрямую обращаться к файлам/нагрузки на локальном компьютере в браузере, непосредственно указав либо абсолютный, либо относительный путь к файлам в ваших локальных каталогах. Вы должны использовать локальный веб-сервер для обслуживания своих файлов и сделать их доступными для браузера (или вы загружаете их где-нибудь, где у вас есть URL-адрес, который вы можете указать в вызове d3.csv ... но это было бы утомительно).

2) Обычно вы можете запускать базовые HTTP-серверы в каталоге, который содержит файлы .js и .html. Например, если у вас установлен Python 3 в системе, вы можете запустить HTTP-сервер в каталоге из командной строки, используя python -m http.server. Затем вы можете получить доступ к своему сайту по адресу http://localhost:8000 К сожалению, этот базовый сервер обслуживает только файлы в каталоге, в котором он запущен, и не позволяет относительные ссылки на пути к другим файлам вне каталога, в котором он был запущен. Для этого вам понадобится для запуска более надежного/гибкого локального веб-сервера, который может быть настроен таким образом, чтобы разрешить относительную привязку файлов к файлам через связку папок.

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

+1

Спасибо за очень подробный ответ - очень ценим. –