2012-09-27 77 views
0

我试图在群发邮件过程中显示进度条。我使用经典的ASP,禁用内容压缩。我只是更新一个元素的大小,其中一个模拟为进度条和一个文本元素作为百分比值。如何在页面加载完成之前使用Javascript更新/修改网页内容?

但是在页面加载过程中,它似乎忽略了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()中的代码:正如你看到它的工作原理,但用户必须点击OK多次。 js-alert.png

+0

http://stackoverflow.com/questions/1397478/forcing-a-dom-refresh-in-internet-explorer-after-javascript-dom -manipulation –

回答

0

控股回应,直到你完全处理做的是不是一个可行的选择,试想一下,30人访问同一页面,你必须将服务器30个持久连接很长一段时间,特别是与IIS,我相信它不是一个可行的选择,它可能在你的开发环境中运行良好,但是当你移动生产并且有更多的人开始访问页面时,你的服务器可能会关闭。

我希望你考虑以下

请在服务器上的后台处理和不持有很长时间的响应

尝试写驻留在服务器上的Windows服务和把你的邮件群发的护理

,如果你还坚持你做它在网络上,尝试使用AJAX一次发送一个电子邮件,每一个Ajax请求发送电子邮件/两

,并在上面的例子中,而不RESP onse.flush浏览器也将无法获取%信息。

0

那么,你不。 除了打印点或图像序列等简单效果以外,它不能安全工作,即使这样缓冲也可能会产生干扰。

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

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,但我喜欢它。

+0

我禁用从IIS缓冲。如果我取消注释alert()行,浏览器会更新内容,但用户应该一次又一次地点击OK。 –

1

第一步是写目前的进展到一个会话变量时,它改变:

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); 
      } 
     } 
    }); 
} 
+0

看起来很聪明。我需要在页面加载完成之前触发该定时器... –

+0

为什么在页面加载之前? –

+0

完成工作需要3〜5分钟,我不想添加任务调度机制。因此,第一次被解雇的事件将在这段时间结束。也许我会使用iframe作为进度条和ajax部分。 –

相关问题