#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) или, используя ту же технологию, я предлагаю вам следующее:
- один вызов ajax, чтобы узнать, сколько файлов требуется обработать.
- один вызов ajax для обработки файла на основе индекса.
Ответ №2:
Если вам удастся справиться, НЕ получая «Элемент обработки XX», а просто сообщение с надписью «Элементы обработки», вы можете добавить следующее к вашему вызову ajax:
if (xmlhttp.readyState==1)
{
document.getElementById("notification").innerHTML="Processing items";
}
readyState == 1 сработает ДО отправки сообщений о вызове.