AJAX / ASP - Обновление панели прогресса - Response.Flush - PullRequest
0 голосов
/ 05 октября 2011

В настоящее время я впервые изучаю AJAX в сочетании с Classic ASP.

У меня есть сценарий AJAX, который вызывает мою страницу ASP (process.asp).В файле ASP есть простой цикл между 1 и 1000, который изображает процесс изображения, который у меня есть в другом месте на моем сайте, к которому я хотел бы добавить AJAX позже.

AJAX SCRIPT

function processItems()
{
var xmlhttp;
if (window.XMLHttpRequest)
{
xmlhttp=new XMLHttpRequest();
}
else
{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("notification").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","processItems.asp",true);
xmlhttp.send();
}

ASP PAGE

Response.Expires = -1
i = 0
Do Until i = 1000
i = i + 1
Loop
Response.Write "Process complete"

В момент, когда он работает нормально, когда процесс завершается, он пишет сообщение пользователю "процесс завершен"... но, поскольку есть много элементов, которые нужно обработать, я хотел бы сообщить своему пользователю, какой элемент в настоящее время обрабатывается, например, "элемент обработки 17 из 1000".

Я прочитал, что мне нужно 'Response.Flush 'для выполнения этой задачи, поэтому ...

Могу ли я использовать ".flush" в циклической части моего ASP-скрипта, чтобы отобразить номер элемента (i)?Если да, нужно ли мне что-нибудь еще?Если нет, может кто-нибудь объяснить, что мне нужно сделать, чтобы заставить его работать?

Вот о чем я думал:

Response.Buffer = True
Response.Expires = -1
i = 0
total = 1000
Do Until i = total
i = i + 1
Response.Write "Processing Item "&i&" of "&total&""
Response.Flush
Loop

Большое спасибо заранее

Ответы [ 2 ]

1 голос
/ 06 октября 2011

Если вам удастся обойтись, НЕ получив «Элемент обработки XX» и просто сообщение «Обработка элементов», вы можете добавить следующее к своему вызову ajax:

if (xmlhttp.readyState==1)
{
document.getElementById("notification").innerHTML="Processing items";
}

readyState == 1 сработает ПЕРЕД вызовами.

1 голос
/ 05 октября 2011

Невозможно добраться туда, куда вы хотите. Ваш вызов ajax вернет ответ после его завершения. Если у вас есть 10000 файлов для обработки, вы получите ответ после окончания обработки в последнем файле.

Вы можете изменить свой подход, используя REVERSE AJAX (commet ajax) или, используя ту же технологию, я предлагаю вам следующее:

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