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

问题描述:

我目前首次学习AJAX,与经典ASP混合使用。AJAX/ASP - 更新进度面板 - Response.Flush

我有一个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" 

在它工作正常的那一刻,当进程已经完成了它写一条消息给用户 “过程完成”。 ..但是,因为有很多项目需要处理,我想告诉我的用户哪个项目正在处理中,例如“处理项目17的1000”。

我读过,我需要“Response.Flush”来执行这项任务,所以......

我可以用“.flush”在我的ASP脚本的环部,显示出项目数量(一世)?如果是的话,我还需要别的吗?如果不是,有人可以解释我需要做些什么才能使其工作?

这是我的想法是:

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(commet AJAX),或使用相同的技术,我建议你如下:

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

如果你可以管理没有得到“处理项目XX”,只是一个消息,说“处理项目”,您可以添加以下到您的AJAX调用相处:

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

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