AJAX / ASP — панель выполнения обновления — ответ.Сброс

#javascript #ajax #asp-classic

#javascript #ajax #asp-классический

Вопрос:

В настоящее время я впервые изучаю AJAX, смешанный с классическим ASP.

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

СКРИПТ AJAX

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

СТРАНИЦА ASP

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

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

Я читал, что мне нужен ответ.Сбросить’ для выполнения этой задачи, так что…

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

Это то, о чем я думал:

 Response.Buffer = True
Response.Expires = -1
i = 0
total = 1000
Do Until i = total
i = i   1
Response.Write "Processing Item "amp;iamp;" of "amp;totalamp;""
Response.Flush
Loop
  

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

Ответ №1:

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

Вы можете изменить свой подход, используя ОБРАТНЫЙ AJAX (commet ajax) или, используя ту же технологию, я предлагаю вам следующее:

  1. один вызов ajax, чтобы узнать, сколько файлов требуется обработать.
  2. один вызов ajax для обработки файла на основе индекса.

Ответ №2:

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

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

readyState == 1 сработает ДО отправки сообщений о вызове.