#javascript #ajax #directory #file-handling
Вопрос:
Учитывая, что большинство вопросов, которые я видел относительно этой концепции, неясны с их конечной целью, я хочу начать с небольшого кода на Python и использовать его в качестве основы для этого вопроса.
from glob import glob
print(glob('*'))
Предыдущий код выводит список всех файлов и/или папок, которые он обнаруживает в каталоге ( *
отмечая текущий каталог, в котором выполняется скрипт), с помощью модуля glob. Поэтому, если бы я запустил сценарий в каталоге с папкой и двумя изображениями, результатом был бы следующий список:
['folder1','image1.png','image2.png','script.py']
Что я хочу сделать, так это воссоздать эту функциональность в Javascript для контента, локального для веб-сервера. (Чтобы облегчить жизнь, скажем, что все это убегает localhost
) Из того, что мне удалось найти, AJAX-лучший современный метод обработки файлов Javascript. С его помощью я смог вызвать httpsRequest
нужную папку, но единственный ответ, который мне удалось получить, — это HTML-дамп того, что, как я предполагаю, является проводником файлов сервера. Попытка использовать модификаторы, такие как responseText
выдача <empty sting>
ответов в консоли. Для контекста это код, с которым я в настоящее время работаю:
function() {
httpRequest = new XMLHttpRequest();
if (!httpRequest) {
alert("Giving up :( Cannot create an XMLHTTP instance");
return false;
}
httpRequest.onreadystatechange = console.log(httpRequest);
httpRequest.open('GET', '/testing/');
httpRequest.send();
}
Комментарии:
1.
httpRequest.onreadystatechange
необходимо установить функцию, которая будет выполняться при получении ответа. Затем он должен быть напечатанhttpRequest.responseText
.2. Вы получите список каталогов только в том случае, если веб-сервер настроен на его предоставление, и не всегда в этом случае. Вы, вероятно, не хотите этого делать по соображениям безопасности. Обычный способ сделать это-настроить сценарий на стороне сервера, который возвращает точно и только то, что вы хотите, чтобы он возвращал, и применяет любую необходимую аутентификацию.
3. @TangentiallyPerpendicular Спасибо за разъяснения по спискам каталогов! Что касается упомянутого вами сценария на стороне сервера, знаете ли вы какие-либо ресурсы, которые подробно описывают, как его настроить? Похоже, это то, на что мне следует обратить больше внимания.
Ответ №1:
Должно быть, тебе нравится проблема XY.
Почему это не работает
Функциональность AJAX не предназначена для динамической обработки файлов, как у Python glob
. Он в первую очередь предназначен для обмена информацией по одному файлу за раз, с возможностью изменения этого файла в XMLHttpRequest
. Это не является недостатком, так как полезно для передачи конфигурационных файлов в формате JSON или для связи с базой данных PHP. Также стоит упомянуть кое-что, упомянутое в комментарии Тангенциально перпендикулярного:
Вы получите список каталогов только в том случае, если веб-сервер настроен на его предоставление, и не всегда в этом случае. [Тем не менее] вы, вероятно, не захотите этого делать по соображениям безопасности.
«Тогда как мне создать динамический список статей, которые будут отображаться в моем HTML?»
А вот и наш X.
Что вам действительно нужно, так это статический генератор сайтов. С его помощью вы сможете создать и скомпилировать сайт, который будет обрабатывать создание этого списка статей для вас.
Для тех, кто хочет продолжить чтение, имейте в виду, что SSG часто используются в связи с Jamstack.