Fire Javascript код, когда загрузка заканчивается - PullRequest
0 голосов
/ 25 ноября 2008

Мне нужно обновить пару старых классических страниц asp & mdash; search.asp страница, которая предоставляет простую форму, которая затем публикуется на results.asp странице. Одним из параметров формы на странице поиска является выпадающий список (<select) для «формата». Если пользователь выбирает формат Excel, страница результатов просто устанавливает для Response.ContentType значение application/vnd.ms-excel и добавляет заголовок размещения содержимого, чтобы задать имя файла и сделать его вложением. Вот и все: это хорошо для того, чтобы потом правильно отображать html, и это, как правило, довольно неплохо работает.

Все это работает довольно хорошо, кроме одной вещи. Причиной использования опции Excel является то, что в этом случае пользователи действительно хотят видеть до 10 000 элементов или даже больше за один поиск. Они будут использовать Excel, чтобы сделать дополнительный анализ результатов. Таким образом, операция поиска обычно занимает чуть более минуты, и я не могу это изменить.

Пользовательский опыт в эту минуту не идеален. Мало того, что пользователь просто сидит там, практически не получая обратной связи, часто достаточно результатов, что страница переполняет буфер ответов. Это означает, что страница должна периодически обновляться, и, следовательно, файл начинает загружаться сразу же, но менеджер загрузки не может самостоятельно предоставить значимую обратную связь. Моя миссия - улучшить ситуацию.

Первый шаг - просто показать простое сообщение processing... на странице поиска при отправке формы, и я могу сделать это достаточно легко. На самом деле, он делал это уже для опции формата «HTML». Проблема в том, что при загрузке файла Excel я не знаю, как сказать что-либо о загрузке, поэтому я могу снова скрыть сообщение, а существующая реализация вообще не предоставляет никаких отзывов о ходе загрузки. Есть идеи? Если я могу просто запустить функцию javascript после завершения загрузки, я могу подключить к этому практически все, но я пока не могу этого сделать.

Обновление:
Я переформулировал вопрос, чтобы попытаться представить проблему более четко.

Ответы [ 4 ]

2 голосов
/ 25 ноября 2008

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

0 голосов
/ 25 ноября 2008

Я бы порекомендовал посмотреть, как модифицировать ваш метод загрузки, чтобы использовать что-то вроде SWFUpload, которое допускает обратный вызов JavaScript в коде. После того, как файл загружен (при условии, что вы его сохраняете), я бы посмотрел, как передать имя файла и набрать его на странице Results.asp, где он затем получит его из хранилища файлов. Это не так безопасно, как хранить это в памяти, которую вы избегаете в своем вопросе; однако, это обеспечит лучшее взаимодействие с пользователем и может обеспечить необходимое решение для обратного вызова.

http://swfupload.org/

Вот пример плагина jQuery, который облегчает процесс загрузки и интеграцию SWFUpload: http://blog.codeville.net/2008/11/24/jquery-ajax-uploader-plugin-with-progress-bar/

0 голосов
/ 25 ноября 2008

Вы можете загрузить файл как вложение, добавив заголовок, чтобы браузер пользователя оставался работоспособным. Я понимаю, что это не совсем то, что вы просите; но если вы объедините это с промежуточной страницей, которую вы используете для версии HTML, это может улучшить пользовательский опыт.

Response.AddHeader "Content-Disposition", "attachment; filename=report.xls"

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

Обновление: Я пытался использовать iframe, периодически проверяя объект документа на странице и перехватывая сообщение об ошибке «интерфейс не существует», когда он переключается в Excel, но при этом все равно блокирует браузер, пока Документ Excel загружается в iframe ... Я не думаю, что будет работать чистое решение js. После этого я думаю, что следующий лучший путь - это (к сожалению) Flash. Удачи.

0 голосов
/ 25 ноября 2008

хмм, возможно ли будет сделать это через ajax? т. е. пользователь выбирает формат, запрос отправляется через ajax, и соответствующий документ загружается, например, в iframe на search.asp. затем вы можете получить успешное событие в вашем вызове ajax и соответствующим образом обработать сообщения.

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