放在一个隐藏的框架中。引擎负责渲染用户界面,帮助用户与服务端通信。ajax引擎允许用户与应用的交互异步发生,独立于与服务端的通信。所以,用户不用再盯着空白的浏览器窗口和沙漏光标,等待服务端的响应。
对于每个用户行为(user action),原本的做法是生成一次http请求;现在变成了对ajax引擎的一次javascript call,响应那些不用返回服务端的用户行为——比如简单的数据验证,在内存中编辑数据甚至是一些导航——都由引擎自己处理。如果引擎需要服务端的响应——比如提交数据以供处理、加载额外的界面代码,或者获得新数据——引擎便会使用xml进行异步请求,而不用停止用户与应用的交互。
其实,凡是用到ajax的地方必定用到html语言,因为没有了html语言ajax也就失去了它存在的意义。先来看下我们的代码吧:
ajax.html
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<title>index_redirect</title>
<script language="javascript">
function redirectpage(){
var now = new date();
var time = now.gettime();
var flag = times%2;
var url;//首选url
var urlbak;//备用url
var errorinfo=1;//定义服务器状态信息,1为正常,0为异常
if(flag==0){
url='http://192.168.0.1:8080/index.jsp';
urlbak='http://192.168.1.1:8080/index.jsp';
}else{
url='http://192.168.1.1:8080/index.jsp';
urlbak='http://192.168.0.1:8080/index.jsp';
}
try{
varxmlhttp=new activexobject("microsoft.xmlhttp");
xmlhttp.open("get",url,false);
xmlhttp.send(null);
}catch(e){
errorinfo=0;//主用server异常,将服务器状态信息置位0
}
if(errorinfo==1){//主用server正常
window.top.location=url;
} else{
window.top.location=urlbak;
}
</script>
</head>
<body onload = redirectpage();>
</body>
</html>
此页面在用户登录服务器之前,先进行服务器的状态判断。拿当前时间的毫秒数(time = now.gettime();)的奇偶进行控制,如果当前毫秒数为奇数,即times%2=1,页面自动转往'http://192.168.1.1:8080/index.jsp',如果当前毫秒数为偶数,即times%2=0,页面自动转往'http://192.168.0.1:8080/index.jsp',从而达到负载均衡的效果。
当然,这只是比较乐观的情况。假如当前毫秒数为奇数,而'http://192.168.1.1:8080/index.jsp'这个服务不可用的话,这时我们就可以利用ajax技术进行判断,
xmlhttp.open("get",url,false);
xmlhttp.send(null);
如果响应异常的话,将会抛出异常:
catch(e){
errorinfo=0;//主用server异常,将服务器状态信息置位0
}
此时errorinfo被置为0,从而将用户请求转向'http://192.168.0.1:8080/index.jsp';反之,如果当前毫秒数为偶数,而'http://192.168.0.1:8080/index.jsp'异常的话,errorinfo的值仍然为1,从而将用户的请求转向'http://192.168.1.1:8080/index.jsp'。进而起到保障只要有一台服务器正常,用户的请求就可以正常响应的目的。
参考文献:
[1][美]穆西亚诺,[美]肯尼迪著,张洪涛,邢璐译.html&xhtml权威指南(第六版).清华大学出版社,2007.
[2]扎卡斯,姆克皮克,福西特著,徐锋等译.ajax高级程序设计.人民邮电出版社,2006.
上一页 [1] [2]