Есть ли способ определить начало загрузки в JavaScript? - PullRequest
5 голосов
/ 07 января 2009

В нашем текущем проекте мы предоставляем загрузку в формате PDF, которая может быть настроена пользователем с помощью HTML-формы, которую он отправляет. Для динамической генерации PDF требуется несколько секунд, и я хотел бы это визуализировать, например, отключив кнопку отправки до начала загрузки. К сожалению, я не смог найти способ определить, когда начинается загрузка *. Поэтому я не знаю, когда снова включить кнопку отправки.

Я уже пытался указать IFrame в качестве цели моей HTML-формы, надеясь, что событие onload будет запущено. Однако это не так - возможно, потому что PDF отправляется с заголовком «Content-disposition: attachment» и фактически не загружается в IFrame.

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

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

Ответы [ 3 ]

4 голосов
/ 07 января 2009

Если бы я был вами, я бы сделал AJAX-вызов на сервер с информацией, сгенерировал файл, затем вернул имя файла / id / что угодно обратно в javascript, что затем делает window.location чем-то вроде download.php? id = x (но файл уже сгенерирован, поэтому он просто устанавливает заголовки и читает их), после чего вы можете снова включить отправку.

2 голосов
/ 07 января 2009

То, что вы хотите - это иметь возможность обнаруживать, когда размер загружаемого файла изменяется с 0 на положительное значение. Насколько я знаю, это невозможно сделать с помощью javascript - вам нужен плагин, который может обращаться к файловой системе клиента.

Рекомендуемое решение: создать сеанс для каждой загрузки. Попросите клиента опросить сервер о состоянии загрузки. Это может быть «несуществующим», «не начатым», «начатым», «законченным». Для сохранения и обновления статуса загрузки вам потребуется некоторая работа на стороне сервера, а также инфраструктура AJAX.

0 голосов
/ 07 января 2009

Самое простое решение - оценить время (щедро) и сделать это таким образом. Это взлом, но он дает желаемый эффект. Другим вариантом может быть отправка формы с обратным вызовом с использованием Ajax для отправки формы и получения генератором сведений о возвращении на вызывающую страницу. http://www.jquery.com/ может быть хорошим началом для этого варианта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...