如何在页面加载完成之前使用Javascript更新/修改网页内容?

时间:2012-09-27 09:19:51

标签: javascript dom browser asp-classic

我正在尝试在群发邮件过程中显示进度条。我使用经典ASP,禁用内容压缩。我只是更新一个元素的大小,其中一个模仿进度条,文本元素为百分比值。

然而,在页面加载期间,似乎忽略了Javascript。我只看了很长时间的沙漏,然后是%100的进度条。如果我在更新Chrome和&之间发出提醒IE9刷新修改后的值就像我期望的那样。

是否有其他Javascript命令替换alert()以帮助更新实际值? alert()命令可以让浏览器立即呈现内容。

谢谢!

 ... Loop for ASP mail send code
 If percent <> current Then
    current = percent   

 %>
   <script type="text/javascript">
     //alert(<%=percent%>);
     document.getElementById('remain').innerText='%<%=percent%>';
     document.getElementById('progress').style.width='<%=percent%>%';
     document.getElementById('success').innerText='<%=success%>';
   </script>
 <%

 End If
 ... Loop end

如果我在代码中使用alert(),这些是屏幕截图:如您所见,但用户应多次单击“确定”。   js-alert.png

4 个答案:

答案 0 :(得分:1)

第一步是将当前进度更改为Session变量:

Session("percent") = percent

第二步是构建一个简单的机制,在请求时将该值输出到浏览器:

If Request("getpercent")="1" Then
    Response.Clear()
    Response.Write(Session("percent"))
    Response.End()
End If

最后,您需要使用计时器读取JavaScript的百分比。这最好用jQuery完成,因为纯JavaScript AJAX是一个令人头痛的问题。添加对jQuery库的引用后,请输入以下代码:

var timer = window.setTimeout(CheckPercentage, 100);
function CheckPercentage() {
    $.get("?getpercent=1", function(data) {
        timer = window.setTimeout(CheckPercentage, 100);
        var percentage = parseInt(data, 10);
        if (isNaN(percentage)) {
            $("#remain").text("Invalid response: " + data);
        }
        else {
            $("#remain").text(percentage + "%");
            if (percentage >= 100) {
                //done!
                window.clearTimeout(timer);
            }
        }
    });
}

答案 1 :(得分:0)

保持响应,直到你的完整处理完成不是一个可行的选择,想象一下30个人访问同一个页面,你将有30个持久连接到服务器很长一段时间,特别是对于IIS,我相信它不是一个可行的选择,它可能在您的开发环境中运行良好,但是当您移动生产并且更多人开始访问页面时,您的服务器可能会停止运行。

我希望您查看以下内容

在服务器上的后台进行处理并且长时间不保持响应

尝试编写驻留在服务器上的Windows服务,并负责群发邮件

如果您仍然坚持要在网上进行,请尝试使用ajax一次发送一封电子邮件,因为每个ajax请求都会发送一封电子邮件/两个

并且在上面没有response.flush的例子中,浏览器也不会获得%信息。

答案 2 :(得分:0)

嗯,你没有。 除了像打印点或一系列图像这样的简单效果之外,它不会安全地工作,即使这样,缓冲也会干扰。

我的方法是让您每秒使用ajax请求更新一个区域,该区域读取日志文件或电子邮件发送计数文件或数据库中由群发邮件过程创建的此类条目。群发邮件流程也将由ajax发起。

答案 3 :(得分:0)

在完全完成处理之前,ASP不会向页面写任何内容(除非你进行刷新)

Response.Buffer=true
write something
response.flush
write something else
etc

(参见此处示例:http://www.w3schools.com/asp/met_flush.asp

更好的方法是使用ajax。

此处示例:

http://jquery-howto.blogspot.com/2009/04/display-loading-gif-image-while-loading.html

起初我不喜欢ajax,但我现在很喜欢它。