Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как правильно сделать "ждите, идет загрузка файла" 
:(
    Опции темы
PyccHeBa
Дата 6.10.2007, 02:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 6.10.2007

Репутация: нет
Всего: нет



Нужно сделать, чтобы появилось сообщение, пока идет загрузка файла (до 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');

?>
PM MAIL   Вверх
Ghirik
Дата 6.10.2007, 06:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 919
Регистрация: 26.3.2007

Репутация: 13
Всего: 20



А флэш использовать не хотите? Вот посмотрите, какой есть замечательный продукт.


--------------------
Отдадим всё клиенту, пускай его машина мучается...

PM MAIL   Вверх
fidres
Дата 9.10.2007, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 15.11.2006

Репутация: нет
Всего: 1



ну а яваскрипт-то тут причём, если загрузка средствами php производится?!
вот и надо средствами php отслеживать статус загрузки...
JavaScript хоть и потомок C, но всё же не столь силён...
хотел было добавить, но сдержался.
 smile 
--------------------
Исправьте ошибку в слове <ХЕРОШО> и я скажу Вам оптимист Вы или пессимист.
PM ICQ   Вверх
PyccHeBa
Дата 10.10.2007, 05:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 6.10.2007

Репутация: нет
Всего: нет



С Флешем разбираться нужно долго, да и код больше станет. Ради такой мелочи как надпись "ждите" не стоит так усложнять жизнь.
А вот на php сделать это хорошая идея! Попробую, потом отпишусь
PM MAIL   Вверх
Madferit
  Дата 19.6.2008, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 11.7.2005
Где: Запорожье

Репутация: нет
Всего: 1



Для меня актуальна та же проблема:

Пользователь инициирует событи на стороне сервера.
По событию сервер возвращает какой-то файл (пользователь получает диалог "Open"|"Save"|"Cancel").

Можно ли подписаться на какое-то Javascript событие, чтобы узнать что файл готов к загрузке (момент появление диалога) ?


PM MAIL   Вверх
Ghirik
Дата 19.6.2008, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 919
Регистрация: 26.3.2007

Репутация: 13
Всего: 20



Цитата

По событию сервер возвращает какой-то файл 


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

Включите в отдаваемую сервером страницу такой кусочек:

Код

<script type="text/javascript">
<!--
function on() {
    alert('Ok!');
};
window.onload = on;
//-->
</script>


Ну, вместо alert() - ваш JavaScript.


--------------------
Отдадим всё клиенту, пускай его машина мучается...

PM MAIL   Вверх
Sannis
Дата 20.6.2008, 01:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 14.8.2007
Где: Москва

Репутация: нет
Всего: 13



Цитата(Madferit @  19.6.2008,  12:50 Найти цитируемый пост)
Пользователь инициирует событи на стороне сервера.
По событию сервер возвращает какой-то файл (пользователь получает диалог "Open"|"Save"|"Cancel").

Какимим средствами Javascript вы это осуществляете?


--------------------
Я Критик Джим, раньше писал моды для IPB 1.3.x-2.3.x, а теперь продвигаю Node.js в массы.
PM MAIL WWW   Вверх
Madferit
Дата 7.7.2008, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 11.7.2005
Где: Запорожье

Репутация: нет
Всего: 1



Sannis,

Цитата


Какимим средствами Javascript вы это осуществляете?



Событие на сервере инициируется простым Http-запросом, на стороне сервера специальным образом формируется Http-ответ, диалог "Open"|"Save"|"Cancel" отображается самим браузером в ответ на полученый Http-ответ, без каких либо телодвижений на стороне JavaScript.

Ghirik,

Цитата

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


Браузер получает не html-документ, а произольного формата файл (например pdf, zip, jpeg... да все что угодно). Поэтому, я ищу каким образом можно отловить событие получения файла с сервера (фактически, момент появление диалога "Open"|"Save"|"Cancel") на стороне страницы, что инициировала запрос.  
PM MAIL   Вверх
Sannis
Дата 7.7.2008, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 14.8.2007
Где: Москва

Репутация: нет
Всего: 13



Цитата

Событие на сервере инициируется простым Http-запросом, на стороне сервера специальным образом формируется Http-ответ, диалог "Open"|"Save"|"Cancel" отображается самим браузером в ответ на полученый Http-ответ, без каких либо телодвижений на стороне JavaScript.

Т.е. просто пользователь нажимает на ссылку, указывающую на скрипт, отдающий файл?

Это сообщение отредактировал(а) Sannis - 7.7.2008, 21:24


--------------------
Я Критик Джим, раньше писал моды для IPB 1.3.x-2.3.x, а теперь продвигаю Node.js в массы.
PM MAIL WWW   Вверх
Madferit
Дата 8.7.2008, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 11.7.2005
Где: Запорожье

Репутация: нет
Всего: 1



Sannis

Пользователь каким либо образом инициирует Http-запрос к серверу. 

Например:
Клик по <Input type="Submit" />
Клик по ссылке www.mysite.com/DownloadFile?fileId=xxxxxx
Инициирует выполнение скрипта который будет выполнять одно из перечисленных выше действий

А сам файл отдается серверной частью. Реализованной, например, с помощью asp.net 

PM MAIL   Вверх
Sannis
Дата 8.7.2008, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 14.8.2007
Где: Москва

Репутация: нет
Всего: 13



Единственное, что можно сделать - повесить вызов функции на onclick этого элемента. Но тогда это может не везде выполнится и будет происходить до появления окна. Иначе никак :/


--------------------
Я Критик Джим, раньше писал моды для IPB 1.3.x-2.3.x, а теперь продвигаю Node.js в массы.
PM MAIL WWW   Вверх
Madferit
Дата 10.11.2008, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 11.7.2005
Где: Запорожье

Репутация: нет
Всего: 1



Нашел решение, не ахти какое, но в моем случае подходит

Идея такая - использовать cookie для того чтобы среагировать на момент старта загрузки: клиент в ответ на запрос файла ждет не только файл но и cookie. Сервер, в свою очередь, в ответ на запрос отдает не только файл но и ожидаемый cookie.

Подробнее:

1. В HTML страницы с которой инициируется загрузка файла, добавляется невидимый iframe:
Код

<iframe id="downloadFileIframe" style="display: none" ></iframe>


2. Javascript, который выполняется, когда пользователь инициирует загрузку:
Код

//показать индикатор загрузки
document.getElementById('processIndicator').style.display = 'block';
//для свойства src невидимого iframe установить URL серверного обработчика, который вернет файл
document.getElementById('downloadFileIframe').src='DownloadFile.ashx?some_parametes_passed_here';
//стартовать таймер, который будет дергать функцию, проверяющую не установлен ли ожидаемый cookie
setInterval(waitForDownloadStart); 
 

3. Javascript функция, которая определяет не установлен ли ожидаемый cookie
Код

function waitForDownloadStart() 
 {
     //проверить установлен ли cookie (код функции опущен)
     var cookieIsSet = isCookieSet();
     if (cookieIsSet)
     {
          //спрятать индикатор загрузки
          document.getElementById('processIndicator').style.display = 'none';
         
          //отменить таймер опрашивающий cookie (код опущен)
     }
}


4. Cерверный обработчик отдает в ответ на запрос не только файл но и устанавливает cookie, что ждет клиент. Код опущен.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1004 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.