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

标签 javascript ajax asp-classic

我目前正在第一次学习 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 项”。

我读到我需要“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

提前非常感谢

最佳答案

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

您可以通过使用 REVERSE AJAX (commet ajax) 来改变您的方法,或者使用相同的技术,我建议您执行以下操作:

  1. 一次 ajax 调用即可获取需要处理的文件数量。
  2. 一次 ajax 调用即可根据索引处理文件。

关于javascript - AJAX/ASP - 更新进度面板 - Response.Flush,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7664494/

相关文章:

javascript - 单击按钮更改为随机背景图像和相应的文本?

file-upload - 在经典 ASP 中上传文件,无需另一个完全自定义的类

sql - 在插入时将 SQL 标识返回到 VB 变量

javascript - JSON.stringify(undefined) 不是字符串

javascript - 如何通过 Selenium webdriver 处理 Abhibus 回程的第二个日期选择器?

javascript - 可调整大小和响应式面板布局?

jquery - ajaxcall 中的错误处理

javascript - 当页面上有多个相同的 ajax 调用时,如何加快我的 Ajax 调用速度?

javascript - jQuery AJAX POST 发送变量

asp-classic - 从 ASP 访问 IIS WMI 提供程序的访问被拒绝错误