2013-02-21 2 views
0

Я использую jQuery.fileЗагрузить плагин John Culviner (большой). Он имеет обратные вызовы, когда загрузка завершена, но мой файл занимает около 30 секунд для генерации (много обработки в конце концов).jquery.fileЗагрузить: сообщить пользователю о прогрессе

Я хочу сообщить пользователю о текущем ходе.

В качестве прототипа, я пытаюсь это:

1) (до инициирования загрузки файла) - неоднократно опрашивать URL каждый второй ($ .get (...)). Он возвращает% complete и обновляет div на странице (0% в этой точке).

2) Инициируйте сценарий fileDownload (в этот момент проверяется, что переменные на стороне сервера, которые 1), начинают обновляться, например. 2% завершено .... 10% завершено .... и т. Д. И т. Д.

3) В идеале, в то время как файл строится, мои вызовы ajax в 1) все еще одновременно выполняют опрос (и обновляют div), так что пользователь начинает видеть некоторый прогресс.

4) Загрузка завершена. Я могу скрыть «прогресс div» в этот момент, так как он покажет 100%.

NB, прогресс, конечно же, будет заменен индикатором прогресса.

Проблема состоит в том, что, как только начинается загрузка файла, ajax вызывает 1) запускает очередность и фактически не выполняется до 4)!

Я думаю, что плагин fileDownload использует iframe, который я бы не подумал бы блокировать вызовы ajax на моей главной странице, но это похоже.

Надеюсь, что имеет смысл. Благодарен за любые советы о том, как с этим бороться.

ответ

0

У меня возникла такая же проблема с веб-приложением ASP.NET MVC. В моем случае проблема была связана с сервером, так как никакие два запроса, использующих один и тот же сеанс, могут выполняться одновременно. Сеанс не является потокобезопасным в ASP.NET.

Решение для проектов MVC заключается в том, чтобы украсить контроллер атрибутом [SessionState(SessionStateBehavior.ReadOnly)]. Чтобы обменять переменные между двумя действиями, используйте потокобезопасный Cache вместо сеанса.

+0

У меня такая же проблема с этим компонентом и ASP.NET MVC5. Я украсил контроллер, содержащий мое действие «progress» с этим SessionStateAttribute, но это вызов моего действия прогресса все еще заблокирован до завершения загрузки файла. Нужно ли мне украшать оба контроллера тем же атрибутом? Это может быть сложно. –