Загрузить файл через POST одним запросом с помощью JavaScript

#javascript #html #ruby-on-rails

#javascript #HTML #ruby-на-рельсах #ruby-on-rails

Вопрос:

Иногда при выполнении HTTP-запроса для загрузки файла (например, PDF, XLSX и т.д.) С собственного веб-сервера необходимо использовать HTTP-метод POST, поскольку для этого требуются динамические входные данные. Я пробовал разные способы свести это к одному HTTP-запросу для достижения наилучшей производительности, но не смог добиться успеха.

Поскольку JavaScript с помощью объекта XMLHttpRequest (AJAX) не может «загружать» файлы, я предполагаю, что для этого требуется обходной путь HTML. Единственное рабочее решение, которое я нашел для этого случая, — это создание элемента формы, обертывающего входные элементы, содержащие данные. Я не смог найти способ, как отправлять логические значения с помощью этого, как это умеет AJAX. Это означало бы: он не подходит для стандартизированной реализации.

Мой вопрос таков: Как я могу загрузить файл с помощью одного POST-запроса, который может содержать логические значения (JavaScript)?

На случай, если это важно: серверная система, которую я использую, — Ruby on Rails

Комментарии:

1. Просто отправьте строки «true» или «false» или что-то еще, что ожидает ваш серверный код. Параметры всегда являются строками в HTTP, независимо от того, является AJAX или нет.

2. Я протестировал это, и вы правы! Спасибо, что улучшили мои знания о HTTP. Вы хотите опубликовать это как ответ или мне следует?

Ответ №1:

Как упоминал @Pointy, логические значения всегда преобразуются в строки при HTTP-сообщении. Я ошибался в этом в своем вопросе. Это означает, что преобразование строки JavaScript JSON или классического объекта в HTML-форму (с последующей отправкой и удалением) работает!

Фактическая отправка AJAX-запроса с последующим запуском вручную перехода по ссылке на сгенерированный файл имеет то преимущество, что можно использовать панель прогресса.