| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > JavaScript: Общие вопросы > как правильно сделать "ждите, идет загрузка файла" |
| Автор: PyccHeBa 6.10.2007, 02:58 |
| Нужно сделать, чтобы появилось сообщение, пока идет загрузка файла (до 40 сек). Как это сделать? Событие onClick на ссылке может вызвать это сообщение, но как его убрать, когда файл загрузился? Упрощенно <a href='download.php?parametrs'>download</a> ------------------------------------------------------ download.php <?php ..... ..... header('Content-type: application/xls'); header('Content-Disposition: attachment; filename='file.xls'); readfile('file.xls'); ?> |
| Автор: Ghirik 6.10.2007, 06:55 |
| А флэш использовать не хотите? Вот посмотрите, какой есть http://swfupload.mammon.se/. |
| Автор: fidres 9.10.2007, 08:46 |
| ну а яваскрипт-то тут причём, если загрузка средствами php производится?! вот и надо средствами php отслеживать статус загрузки... JavaScript хоть и потомок C, но всё же не столь силён... хотел было добавить, но сдержался. |
| Автор: PyccHeBa 10.10.2007, 05:38 |
| С Флешем разбираться нужно долго, да и код больше станет. Ради такой мелочи как надпись "ждите" не стоит так усложнять жизнь. А вот на php сделать это хорошая идея! Попробую, потом отпишусь |
| Автор: Madferit 19.6.2008, 12:50 |
| Для меня актуальна та же проблема: Пользователь инициирует событи на стороне сервера. По событию сервер возвращает какой-то файл (пользователь получает диалог "Open"|"Save"|"Cancel"). Можно ли подписаться на какое-то Javascript событие, чтобы узнать что файл готов к загрузке (момент появление диалога) ? |
| Автор: Ghirik 19.6.2008, 23:24 | ||||
Если я правильно понял, то вам нужно поймать событие получения браузером документа выданного сервером. Включите в отдаваемую сервером страницу такой кусочек:
Ну, вместо alert() - ваш JavaScript. |
| Автор: Madferit 7.7.2008, 17:37 | ||||
Sannis,
Событие на сервере инициируется простым Http-запросом, на стороне сервера специальным образом формируется Http-ответ, диалог "Open"|"Save"|"Cancel" отображается самим браузером в ответ на полученый Http-ответ, без каких либо телодвижений на стороне JavaScript. Ghirik,
Браузер получает не html-документ, а произольного формата файл (например pdf, zip, jpeg... да все что угодно). Поэтому, я ищу каким образом можно отловить событие получения файла с сервера (фактически, момент появление диалога "Open"|"Save"|"Cancel") на стороне страницы, что инициировала запрос. |
| Автор: Sannis 7.7.2008, 21:23 | ||
Т.е. просто пользователь нажимает на ссылку, указывающую на скрипт, отдающий файл? |
| Автор: Madferit 8.7.2008, 13:32 |
| Sannis Пользователь каким либо образом инициирует Http-запрос к серверу. Например: Клик по <Input type="Submit" /> Клик по ссылке www.mysite.com/DownloadFile?fileId=xxxxxx Инициирует выполнение скрипта который будет выполнять одно из перечисленных выше действий А сам файл отдается серверной частью. Реализованной, например, с помощью asp.net |
| Автор: Sannis 8.7.2008, 13:55 |
| Единственное, что можно сделать - повесить вызов функции на onclick этого элемента. Но тогда это может не везде выполнится и будет происходить до появления окна. Иначе никак :/ |
| Автор: Madferit 10.11.2008, 14:38 | ||||||
| Нашел решение, не ахти какое, но в моем случае подходит Идея такая - использовать cookie для того чтобы среагировать на момент старта загрузки: клиент в ответ на запрос файла ждет не только файл но и cookie. Сервер, в свою очередь, в ответ на запрос отдает не только файл но и ожидаемый cookie. Подробнее: 1. В HTML страницы с которой инициируется загрузка файла, добавляется невидимый iframe:
2. Javascript, который выполняется, когда пользователь инициирует загрузку:
3. Javascript функция, которая определяет не установлен ли ожидаемый cookie
4. Cерверный обработчик отдает в ответ на запрос не только файл но и устанавливает cookie, что ждет клиент. Код опущен. |