日期:2014-05-16  浏览次数:20862 次

ajax使用的技术(笔记2)
JavaScript脚本语言:JavaScript是一种具有丰富的面向对象特性的程序设计语言,利用它能执行许多复杂的任务,例如:jax就是利用JavaScript将DOM、XHTML(或HTML)、XML以及CSS等技术综合起来,并控制它们的行为。因此,要开发一个复杂高效的ajax应用程序,就必须对JavaScript有深入的了解。
XMLHttpRequest:是ajax技术中的核心技术。是一个具有应用程序接口的JavaScript对象,能够利用超文本传输协议(HTTP)连接服务器。通过XMLHttpRequest对象,ajax可以像桌面应用程序一样只同服务器端进行数据层面的交互,而不用每次都刷新页面,也不用每次都将数据的处理工作交给服务器来做,这样既减轻了服务器的负担又加快了相应速度,从而缩短了用户的等待时间。
使用XMLHttpRequet对象发送请求和处理相应之前,首先需要初始化该对象,由于XMLHttpRequest不是一个W3C标准,所以对于不同的浏览器,初始化的方法也不同。

IE浏览器:将XMLHttpRequest对象实例化为一个ActiveX对象。
var http_request=new ActiveXObject("Msxml2.XMLHTTP");
//或者
var http_request=new ActiveXObject("Microsoft.XMLHTTP");

Mozilla、Safari等其他浏览器:会将其实例化为本地的一个JavaScript对象。
var http_request=new XMLHttpRequest();

创建一个跨浏览器的XMLHttpRequest对象:
if (window.XMLHttpRequest){
	http_request=new XMLHttpRequest();
}elseif (window.ActiveXObject){
	try {
		http_request=new ActiveXObject("Msxml2.XMLHttp");
	} catch (e) {
		try{
			http_request=new ActiveXObject("Microsoft.XMLHTTP");
		}catch(e){}
	}
}

1、XMLHttpRequest对象的常用方法
(1)open()方法:用于设置进行异步请求目标的URL、请求方法以及其他参数信息。
open("method","URL"[,asyncFlag[,"userName"[,"password"]]])
meshod:请求类型,get或post。
URL:用于指定请求地址,可以是绝对路径或相对路径,也可以传递查询字符串。
asyncFlag:可选参数,指定请求方式,true为同步请求,false为异步请求,默认为true。
userName:可选参数,指定用户名,没有时可省略。
password:可选参数,指定请求密码,没有时可省略。
具体用法可参考如下代码:
function Post(){
var name=document.form1.name.value;
var sex=document.form1.sex.value;
var Ajax=createXMLHttps();//---这是创建XMLHttps对象的函数,就不写了
var url="Ajax_Post.asp";//--接收数据的页面
var sendData="v_name="+escape(name);//包含中文的值,需要escape进行编码
sendData+="&sex="+escape(sex);
Ajax.onreadystatechange=function(){
if (4==Ajax.readyState){
//在这里进行你需要的一些操作
}
}
Ajax.open("GET",url,true);
//如果是POST方式提交数据,下两行必不可少
Ajax.setrequestheader("content-length",sendData.length);
Ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
Ajax.send(sendData);//要POST的数据
}

接收数据时,直接使用request.form("name")即可获得name的值,为防止出错,也可对获取到的值再进行反编码
name=unescape(request.form("name"))'---用unescape函数
(2)send()方法:用于向服务器发送请求。如果请求声明为异步,该方法将立即返回,否则将直到接收到响应为止,
send(content)
content:指定发送的数据,可以是DOM对象的实例、输入流或字符串,如果没有参数,需要传递时可以设置为null。
用法举例:
<!--[if !supportLists]-->1       <!--[endif]-->var url = "login.jsp?user=XXX&pwd=XXX";
<!--[if !supportLists]-->2       <!--[endif]-->xmlHttpRequest.open("GET",url,true);
<!--[if !supportLists]-->3       <!--[endif]-->xmlHttpRequset.send(null);
   此外,也可以使用send方法传递参数。使用send方法传递参数使用的是POST方法,需要设定Content-Type头信息,模拟HTTP POST方法发送一个表单,这样服务器才会知道如何处理上传的内容。参数的提交格式和GET方法中url的写法一样。设置头信息前必须先调用open方 法。
  例如:
<!--[if !supportLists]-->1       <!--[endif]-->xmlHttpRequest.open("POST","login.jsp",true);
<!--[if !supportLists]-->2       <!--[endif]-->xmlHttpRequest.setRequestHeder("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");
<!--[if !supportLists]-->3       <!--[endif]-->xmlHttpRequest.send("user="+username+"&pwd="+password);
  需要注意的是根据提交方式的不同,两种提交方式分别调用后台的doGet方法和doPost方法。
(3)setRequestHeader()方法:为请求的http头设置值。切记要放到open()之下。
setRequestHeader("label","value")
label:指定http头。
value:为指定的http头设置值。
(4)abort()方法:用于停止当前的异步请求。
(5)getAllResponseHeaders()方法:用于以字符串形式返回完整的http头信息,当存在参数时,表示以字符串形式返回有该参数指定的http头信息。
2、XMLHttpRequest对象的常用属性:
onreadystatechange:每个状态改变时都会触发这个事件的处理器,通常会调用一个JavaScript函数。
readyState: