AJAX / ASP - 更新进度面板 - Response.Flush

时间:2011-10-05 16:22:02

标签: javascript ajax asp-classic

我目前正在学习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 of 1000”。

我读过我需要'Response.Flush'才能执行此任务,所以......

我可以在ASP脚本的循环部分使用'.flush'来显示项目编号(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 个答案:

答案 0 :(得分:1)

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

您可以使用REVERSE AJAX(commet ajax)更改您的方法,或者使用相同的技术,我建议您使用以下内容:

  1. 一个ajax调用,以获取需要处理的文件数。
  2. 一个ajax调用基于索引处理文件。

答案 1 :(得分:1)

如果您可以通过不获取“处理项目XX”并且只是显示“处理项目”的消息来管理相处,则可以在您的ajax调用中添加以下内容:

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

readyState == 1将在通话之前触发。