Как использовать AJAX для создания списка каталогов на стороне сервера?

#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.