Бар загрузки с классическим жерехом - PullRequest
0 голосов
/ 17 июля 2009

есть ли шанс показать полосу загрузки при создании чего-либо в цикле с классическим asp?

Я подумал о некоторой панели загрузки в стиле ajax, которая показывает, что страница все еще создает что-то.

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

При загрузке asp-страницы я не могу открыть другую asp-страницу на сервере sam с таким же сеансом. Это возможно с новым сеансом, но я хочу работать с тем же сеансом (если это возможно).

Мысли: Можно ли это сделать с помощью ajax-запроса, который запрашивает asp-страницу и показывает полосу загрузки во время загрузки страницы?

Есть ли обходной путь для обработки строки состояния?

(простите за плохой английский) Спасибо

Edit:

Я так, но я не могу получить доступ к переменной сеанса через asp-страницу. Страница чтения сеанса дает мне только ответ после выполнения первого asp-запроса. Я думаю, что это сессия-очередь-думать.

для меня это выглядит так:

страница ajax - (страница процесса запроса asp) -> process.asp

(та же страница ajax) - (запросить страницу чтения сеанса) -> sessionreader.asp

while sessionstatus! = 100 показывать панель процесса

проблема в том, что я получил ответ от sessionreader.asp, когда процесс process.asp завершен. Вот почему я думаю, что это asp-session-queue-think.

Может быть, это будет работать, если второй запрос даст новый идентификатор сеанса (если это вообще возможно)?

Ответы [ 4 ]

3 голосов
/ 17 июля 2009

Вы можете активировать GIF-анимацию на стороне клиента в момент отправки запроса.

1 голос
/ 17 июля 2009

Раньше была хитрость с отключением Response.Buffer (установите его в false) или разрешением буферизации, но время от времени вы выполняете Response.Flush, когда хотите обновить свой прогресс.

Итак, скажем, у вас есть индикатор выполнения где-то в верхней части вашей страницы (либо изображение, либо таблица, либо div, либо все, что вы хотите), и когда вы делаете что-то в сценарии asp (скажем, в цикле), время от времени верните JavaScript клиенту, чтобы обновить индикатор выполнения, который уже должен отображаться на экране. что-то вроде:

<%
  REM Might be a good idea to set the timeout to some large number here...
  Response.Timeout = ...
%>
<html>
:
<body>
  <p>Please wait...<span id="progress">0</span>% completed.</p>
  : content here...
  <%
  REM Make sure the things above this get sent to the client first
  REM so they will be rendered before the rest of the page is rendered.
  Response.Flush()

  For iCnt = 0 To 100
    REM Do some stuffs here...

  %>
    <script>$("#progress").html(i)</script>
  <%
    Response.Flush()
  Next
  %>
  : some more contents here...
</body>
</html>

Я не уверен, что это все еще работает с современными браузерами, не использую его некоторое время.

0 голосов
/ 18 июля 2009

Вы на правильном пути, проблема заключается в том, что вы разрабатываете для Windows XP и сталкиваетесь с ограничением, что IIS 5 будет обрабатывать только один запрос за раз.
Поскольку вы подозреваете, что запрос AJAX о ходе выполнения не возвращается, пока не будет завершен исходный запрос, который вы пытаетесь отслеживать.

Нет способа обойти это, что я знаю с этой версией IIS. Это, вероятно, еще одно ограничение, встроенное для предотвращения использования XP IIS 5 в производственной среде. Даже если второй запрос поступает с другого компьютера с другим IP-адресом, он не будет обработан, пока не будет завершен первый.

0 голосов
/ 17 июля 2009

Вы не сможете сделать это только с одной страницей ASP. Вам понадобится страница, которая показывается пользователю (где живет ваш индикатор). Затем вам нужно будет сделать ajax-вызов (с jQuery ??) в цикле к странице, которая читает объект сеанса. И вам понадобится страница, которая фактически выполняет вашу обработку и записывает свой статус в сеанс, который периодически отслеживается вызовом ajax. Вам нужно будет совершать периодические звонки с ajax, чтобы проверить сессию с течением времени, пока вы не достигнете окончательного результата. Вы можете сохранить число в сеансе, скажем, 1-100, если это очень длинный медленный процесс ... но 10, 20, ..., 100, вероятно, будут работать лучше всего. Когда вы достигнете 100, вы прервете цикл и больше не будете опрашивать страницу чтения сеанса.

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

Страница, которая выполняет обработку, не может ничего показать пользователю, пока она не закончит обработку.

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

Имеет смысл?

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