JQuery / ASP - загрузка прогресса с помощью куки - PullRequest
0 голосов
/ 20 января 2012

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

1) На странице формы загрузки ////////

Submit upload form & files to processing page.

2) На странице обработки /////////

For Each file In myFileArray Then
   ' Save the file
   ' Add 1 to a cookie called progressReport
Next

3) На странице загрузки формы ///////

checkTimer = window.setInterval(function () {
    var cookieContents = $.cookie('progressReport');
    if (cookieContents != "")
    $('#uploadProgress').html(cookieContents + ' files uploaded');
}, 2000);

---- ОБНОВЛЕНИЕ ----

Благодаря приведенному ниже ответу я не могу этого сделать, поскольку файл cookie не будет записан до тех пор, пока страница не закончит обработку, то есть пользователь не получит никакой обратной связи.пока это не закончилось.Бесполезно!

Я изменил свой план.Это подходит моему приложению, вероятно, не для некоторых.

1) Выполните AJAX-вызов страницы сервера, которая создает уникальный идентификатор и папку с именем «уникальный идентификатор».Когда закончите, отправьте ID обратно как ответ, добавьте уникальный идентификатор к скрытому вводу в форме загрузки.

2) Пользователь отправляет файл (-ы), проверяет наличие идентификатора при скрытом вводе, а затем публикует на скрытый iFrame.При отправке каждые 1-5 секунд отправляйте вызов AJAX на другую страницу сервера, проверяя, сколько файлов находится в этой папке, отправляйте количество в ответ, обновляйте панель прогресса.

Ответы [ 2 ]

1 голос
/ 20 января 2012

Это возможно, но использование cookie - странный способ сделать это.Если прогресс хранится на стороне сервера, вам нужно просто обновить клиента с помощью ajax-запроса.Определенно возможно использовать куки, но это кажется ненужным.Если вы хотите, чтобы клиент обновлялся, например, когда определенный запрос завершил первый, второй, второй этап, пока он окончательно не завершился, то вам, вероятно, следует рассмотреть «Длинный опрос» как альтернативу.Или определенные системы толчка.

Для загрузки файлов вы сможете найти несколько примеров того, как они показывают прогресс.И если вы готовы, HTML5 пересмотрел XMLHttpRequest Level 2 , чтобы упростить управление такими вещами, как процесс загрузки.

1 голос
/ 20 января 2012

Это не будет работать, потому что это:

For Each file In myFileArray Then
   ' Save the file
   ' Add 1 to a cookie called progressReport
Next

Не будет записывать cookie в браузер, пока все файлы не будут завершены.

Вам необходимо разработать способ начать загрузку этих файлов один за другим со стороны клиента .Ваша страница обработки получает только один файл;увеличивает значение в файле cookie и завершает ответ.Другими словами, ваша страница обработки вызывается n раз для n файлов.Ваш код JavaScript продолжает читать cookie каждые 2 секунды и отображать значение, которое было обновлено последним ответом.

...