Ajax技术详解

Ajax技术详解

概述:允许浏览器与服务器通信而无须刷新当前页面的技术都被叫做Ajax.Ajax的核心是JavaScript对象XmlHttpRequest

分析:首先我们先要使用ajax的话,必须要创建XmlHttpRequest对象,根据不同的浏览器,创建的方法也不同,创建成功后,我们需要利用该对象中的方法来请求后台,然后利用该对象的属性获取后台返回的数据,然后我们就完成了异步请求。

一、创建XmlHttpRequest

function createXMLHttpRequest() {
var xmlHttp;
try {
//firefox opera 等 非 IE的浏览器中
xmlHttp = new XMLHttpRequest();
} catch (ex) {
try {
//IE浏览器
xmlHttp = new ActiveXObject("MSXML2.XMLHTTP");
} catch (e) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
}


return xmlHttp;

}

二、定义请求参数

利用XmlHttpRequest对象调用open方法来定义请求的参数,确定提交方法和url和请求方式xmlHttp.open("GET","./servlet/EmployeeServlet",true);

参数一、表示用是方式来提交,与formmethod类似,值一般为get  post

参数二、表示请求的地址,可以为相对路径或绝对路径,一般在后来加一个参数随机数或者毫秒数来表示地址的唯一性。

参数三、表示是否用异步请求方式,如果是false表示同步请求,一般为true

如果是post提交的话,则必须指定一个请求头信息

xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

三、发送请求

如果是post则可以指定参数,多个用&符号来连接,如果用get则一般设置为null值。xmlHttp.send("nowpage="+nowpage);

四、在后台就已用request对象来获取你带的参数了,然后就可以做一些后台处理并向前台返回处理的结果和数据扽。

五、在前台接受服务器接受后台传过来的数据

xmlHttp.onreadystatechange = function() { //系统会自动调用这个事件

if (xmlHttp.readyState == 4) {  判断状态,为4的时候表示已经请求成功

if (xmlHttp.status == 200) {//表示页面的正确

xmlHttp.responseText;就可以获取后台传递的文本数据

如果是xml就可以用xmlHttp.responseXML来获取xml的对象,直接访问节点操作。

}

}

}

六、xmlHttpRequest的方法和属性



七:实例代码: 城市连动,后台暂时不发了。

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'city.jsp' starting page</title>
    
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
  </head>
  
  <body>
    <div align="center">
    	<select id="province">
    	 <option>请选择省</option>
    	</select>
    	<select id="city">
    	 <option>请选择市</option>
    	</select>
    </div>
  </body>
  <script type="text/javascript">
  <!--
  	//定义缓存数据
  	var cityData=new Array();
  	var provinceData=null;
  	window.onload=function(){
  	 var xmlHttp=createXmlHttpRequest();
  	 var provinceNode=getNode("province");
  	 var cityNode=getNode("city");
  	 if(provinceData!=null){
  	 addOption(provinceNode, provinceData);
  	 }else{
  	 loadProvince(xmlHttp, provinceNode);  
  	 }
  	 provinceNode.onchange=function(){
  	 removeOption(cityNode);
if(this.value!="请选择省"){
if(cityData.hasOwnProperty(this.value)){
addOption(cityNode,cityData[this.value]);
}else{
loadCity(xmlHttp,cityNode,this.value);
}
}
  	 };
  	};
  	//异步加载市数据
  	function loadCity(xmlHttp,cityNode,value){
  	 xmlHttp.onreadystatechange=function(){
  	 if(xmlHttp.readyState==4 && xmlHttp.status==200){
  	 //成功请求,处理前台
  	 var xmlDoc=xmlHttp.responseXML;
  
  	 var cityXmlNodes=xmlDoc.getElementsByTagName("city");
  	 addOption(cityNode, cityXmlNodes);
  	 cityData[value]=cityXmlNodes;
  	 }
  	 };
  	 xmlHttp.open("POST","./servlet/CityServlet?timeStamp="+new Date().getTime(),true);
  	 xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
  	 xmlHttp.send("value="+value);
  	}
  	//异步加载省数据
  	function loadProvince(xmlHttp,provinceNode){
  	 xmlHttp.onreadystatechange=function(){
  	 if(xmlHttp.readyState==4 && xmlHttp.status==200){
  	 //成功请求,处理前台
  	 var xmlDoc=xmlHttp.responseXML;
  
  	 var provinceXmlNodes=xmlDoc.getElementsByTagName("province");
  	 addOption(provinceNode, provinceXmlNodes);
  	 provinceData=provinceXmlNodes;
  	 }
  	 };
  	 xmlHttp.open("get","./servlet/PorvinceServlet?timeStamp="+new Date().getTime(),true);
  	 xmlHttp.send(null);
  	}
  	//清除节点
  	function removeOption(node){
  	 var optionNodes = node.getElementsByTagName("option");
var len = optionNodes.length;
for(var m=0;m<len;m++){
if(optionNodes[1]){
node.removeChild(optionNodes[1]);
}
}
  	}
  	//添加节点
  	function addOption(node,nodes){
  	 for(var i=0;i<nodes.length;i++){
var optionNode=document.createElement("option");
optionNode.setAttribute("value",nodes[i].firstChild.nodeValue);
optionNode.appendChild(document.createTextNode(nodes[i].firstChild.nodeValue));
node.appendChild(optionNode);
  	 }
  	}
  	function getNode(id){
  	 return document.getElementById(id);
  	}
  	function createXmlHttpRequest(){
  	 var xmlHttp;
  	 try{
  	 //firefox opera 等  非IE的浏览器中
  	 xmlHttp=new XMLHttpRequest();
  	 }catch(ex){
  	 //IE浏览器
  	 try{
  	 xmlHttp=new ActiveXObject("MSXML2.XMLHttp");  
  	 }catch(e){
  	 xmlHttp=new ActiveXObject("Mircrosoft.XMLHttp");  
  
  	 };
  	 }
  	 return xmlHttp;
  	};
  //-->
  </script>
</html>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值