AJAX / ASP -更新进度面板-响应.刷新

AJAX / ASP - Update Progress Panel - Response.Flush

本文关键字:响应 刷新 ASP 更新 AJAX      更新时间:2023-09-26

我目前是第一次学习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 && 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"

目前它工作得很好,当进程完成时,它向用户写一个消息"进程完成"…但是,因为有很多项目要处理,我想告诉我的用户哪个项目目前正在处理。"处理1000项中的第17项".

我读到我需要回应。刷新'以执行此任务,因此…

我可以用'。冲洗'在我的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

提前致谢

你不可能到达你想去的地方。ajax调用完成后将返回一个响应,如果有10000个文件要处理,则在最后一个文件的处理结束后获得一个响应。

你可以改变你的方法,通过使用反向AJAX(逗号AJAX),或者,使用相同的技术,我建议你如下:

  1. 一个ajax调用来获取需要处理多少文件。
  2. 基于索引处理文件的ajax调用。

如果您可以通过不获得"处理项目XX"而只是一条消息说"处理项目"来管理相处,您可以将以下内容添加到ajax调用:

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

readyState == 1将在call post之前触发。