Javascript 等待时显示正在加载的内容/图像

Javascript 等待时显示正在加载的内容/图像,javascript,asp-classic,Javascript,Asp Classic,我有一个ASP页面,做一些后端处理。它调用一个存储过程,如果进程完成,该存储过程将返回一个状态值。整个处理时间可持续约10-30秒,具体取决于输入数据量 在这段时间内,我想显示正在加载的图像或文本比只显示空白页面要好得多。至少通过这种方式,用户知道她的请求正在被处理,只需要等待它完成 我不知道如何用经典的ASP实现这一点。有什么想法吗 非常感谢 编辑: 嗯,我想有件事我之前没有解释清楚。这里的实际情况是: 我有两个asp页面,A.asp和B.asp。用户单击a.asp上的按钮,它将表单提交到B.

我有一个ASP页面,做一些后端处理。它调用一个存储过程,如果进程完成,该存储过程将返回一个状态值。整个处理时间可持续约10-30秒,具体取决于输入数据量

在这段时间内,我想显示正在加载的图像或文本比只显示空白页面要好得多。至少通过这种方式,用户知道她的请求正在被处理,只需要等待它完成

我不知道如何用经典的ASP实现这一点。有什么想法吗

非常感谢

编辑:

嗯,我想有件事我之前没有解释清楚。这里的实际情况是:

我有两个asp页面,A.aspB.asp。用户单击a.asp上的按钮,它将表单提交到B.asp,B.asp是调用后端存储过程的处理页面。当B.asp完成处理后,它会将用户重定向到另一个页面


所以我遇到的问题是,每当用户单击A.asp的按钮并访问B.asp时,就会出现一个空白页面,尽管我已经在B.asp的最开始处放置了HTML代码(显示加载图像)(连接数据库的asp代码在下面)。我不知道为什么它加载时不显示图像

当您说显示加载消息时,我解释为您使用的是ajax。在ajax start中可以显示该图像,在ajax complete回调中可以隐藏加载的图像。如果可能,请提供一些代码示例

如果使用jQuery ajax,您可以使用:

$('#loaderImage').show();
$.ajax({
    // Other ajax parameters
    success: function () {
       // hiding the image here
       $('#loaderImage').hide();
    }
});

这是我一直在使用的解决方案的一部分,应该可以让您开始--

CSS

#loading {
    width: 100%;
    height: 100%;
    top: 0px;
    left: 0px;
    position: fixed;
    display: block;
    opacity: 0.7;
    background-color: #000;
    z-index: 99;
    text-align: center;
}

HTML

<div id="loading">
    <img id="loading-image" src="images/ajax-loader.gif" alt="Loading..." />
</div>


JavaScript

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
<script language="javascript" type="text/javascript">
    $(window).load(function() {
        $('#loading').hide();
    });
</script>

$(窗口)。加载(函数(){
$(“#加载”).hide();
});


在我的示例中,我使用了jQuery 1.4.4,但最新版本也应该可以使用。

如前所述,我建议您使用Ajax。然后,您可以更好地控制流和用户看到的内容


但是-如果你真的想坚持使用经典的ASP,一种方法是在整个页面加载之前呈现一个带有Response.Write调用和Response.Flush调用的“加载页面”消息;我通过将工作分成两部分来解决这个问题,并将所有耗时的工作放在一个每分钟都会触发的计划任务(只是一个WSC文件)中。我也可以创建一个服务,但这同样有效

我的ASP文件创建了初始记录,有效地将要完成的工作排在队列中,以便执行预定任务并完成繁重的工作。我预定的任务也是“自我意识的”;如果在触发下一个时,上一个仍在运行,它只会终止自身并等待原始文件完成。这样就没有重复处理的机会


结果是服务器上的负载下降到几乎为零,即使同时有数百个请求,最终用户也会得到即时反馈,告诉他们在处理订单时会收到电子邮件确认,以及“确认”ID(来自初始记录创建的标识)因此,每个人都有一个参考点,以防出现任何问题

为什么不加载页面并让用户通过单击按钮触发操作?该按钮将通过AJAX向实际处理页面发送请求。这是可行的,但如果您已将数据输出到页面,您将无法使用
Response.Redirect()
之后,您还必须确保调用
Response.Flush()
在开始长时间运行的处理之前,否则用户仍然看不到任何东西。当您已将数据写入页面时,您需要转储一个
加上一个泛型。如果您在X秒内未被重定向,请在数据库处理完成后单击此处在页面末尾键入消息completes@RobV我确实试过这个。但是最后得到一个错误消息,
Response object error'ASP 0156:80004005'头错误HTTP头已经写入客户端浏览器。在写入页面内容之前,必须对HTTP头进行任何修改
是,您不能调用
Response.Redirect()
将数据写入页面后,必须使用
重定向或其他基于Javascript的方法,这正是我在评论中试图解释的,我没有考虑执行响应。Redirect call,仅仅输出结果——当然,这应该隐藏负载message@RobV我使用的是'response.AddHeader'Refresh',4;URL=“&URL”,而不是
response.Redirect()
,但无论如何都是一样的。我们如何动态地使用