我在这里介绍的解决方案旨在展示一种方法,让“正在加载...”框在您进行服务器端处理时出现,并在服务器端处理完成时消失。
我将使用非常基本的 AJAX 机制(在 FF 上测试,但 IE 也应该没问题)来完成此操作,即不使用像 Prototype 或 jQuery 或 Dojo 这样的框架,因为您没有指定您对它们的了解。
为了让您更好地理解其中的技巧,以下只是一个小示例,并不假装是开箱即用的解决方案。我倾向于不肤浅,但我认为一个更清晰的例子可以比很多词更好地解释。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>First Example</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style>
.hidden {
display: none;
}
.loadingInProgress {
color: #FFFFFF;
width: 75px;
background-color: #FF0000;
}
</style>
<script type="text/javascript">
var httpRequest;
if (window.XMLHttpRequest) { // Mozilla, Safari, ...
httpRequest = new XMLHttpRequest();
httpRequest.overrideMimeType('text/xml');
} else if (window.ActiveXObject) { // IE
try {
httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
try {
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {}
}
}
if (!httpRequest) {
alert('Giving up :( Cannot create an XMLHTTP instance');
}
httpRequest.onreadystatechange = function(){
switch (httpRequest.readyState) {
case 1: // Loading
document.getElementById('loading').className = "loadingInProgress";
break;
case 4: // Complete
document.getElementById('loading').className = "hidden";
if (httpRequest.status == 200) {
// perfect!
} else {
// there was a problem with the request,
// for example the response may be a 404 (Not Found)
// or 500 (Internal Server Error) response codes
}
break;
}
};
function go() {
httpRequest.open('GET', document.getElementById('form1').action, true);
httpRequest.send('');
}
</script>
</head>
<body>
<div id="loading" class="hidden">Loading...</div>
<form id="form1" name="form1" action="doSomething.php">
<input type="button" value="Click to submit:" onclick="go()" />
</form>
</body>
</html>
如您所见,<div>
其中包含“正在加载...”消息。
原理是显示/隐藏<div>
取决于XMLHttpRequest
对象的readyState
.
我已经使用 的onreadystatechange
处理程序XMLHttpRequest
来触发readyState
更改。
我使用的后端 php 脚本(声明为表单的action
)只是休眠(5),让“正在加载...”消息出现 5 秒。
<?php
sleep(5);
header('Cache-Control: no-cache');
echo "OK";
?>
标Cache-control: no-cache
头是必需的,因为通常如果您不设置它,浏览器将缓存响应,避免在需要时重新提交请求。
Mozilla MDC是“入门”AJAX 文档的一个很好的来源。
整个事情可以由像 Prototype 这样的 Javascript 框架更温和地处理,利用其浏览器安全的方法,为您节省数小时的调试时间。
编辑:
我选择了 php,因为我不了解 ASP.NET 和 ASP,对此感到抱歉。