0

我正在尝试在群发邮件过程中显示进度条。我使用经典的 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

4 回答 4

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);
            }
        }
    });
}
于 2012-10-02T07:40:46.070 回答
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,但我现在喜欢它。

于 2012-09-27T11:08:33.807 回答
0

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

我希望你看看以下

在服务器后台做处理,不要长时间保持响应

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

如果您仍然坚持在网络上执行此操作,请尝试使用 ajax 一次发送一封电子邮件,对于每个 ajax 请求发送一封电子邮件/两封

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

于 2012-09-27T09:26:56.227 回答
0

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

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

于 2012-09-27T09:30:00.080 回答