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),或使用相同的技术,我建议你如下:
- 一个Ajax调用获取文件需要多少处理。
- 一个ajax调用基于索引处理文件。
答
如果你可以管理没有得到“处理项目XX”,只是一个消息,说“处理项目”,您可以添加以下到您的AJAX调用相处:
if (xmlhttp.readyState==1)
{
document.getElementById("notification").innerHTML="Processing items";
}
readyState的= = 1将在通话记录之前触发。