mlhttprequest 对象是ajax功能的核心,要开发ajax程序必须从了解xmlhttprequest 对象开始。
了解xmlhttprequest 对象就先从...
mlhttprequest 对象是ajax功能的核心,要开发ajax程序必须从了解xmlhttprequest 对象开始。
了解xmlhttprequest 对象就先从创建xmlhttprequest 对象开始,在不同的浏览器中创建xmlhttprequest 对象使用不同的方法:
先看看ie创建xmlhttprequest 对象的方法(方法1):
var xmlhttp=activexobject("msxml12.xmlhttp");//较新的ie版本创建msxml12.xmlhttp对象
var xmlhttp=activexobject("microsoft.xmlhttp");//较老的ie版本创建microsoft.xmlhttp对象
而 mozilla、opera、safari 和大部分非ie的浏览器都使用下面这种方法(方法2)创建xmlhttprequest 对象:
var xmlhttp=new xmlhttprequest();
注意:实际上internet explorer 使用了一个名为 xmlhttp 的对象,而不是 xmlhttprequest 对象,而 mozilla、opera、safari 和 大部分非 microsoft 浏览器都使用的是后者(下文统称 xmlhttprequest 对象)。ie7开始也开始使用xmlhttprequest 对象了。
因此我们需要创建一个能兼容多浏览器的xmlhttprequest对象:
第一种方法:
var xmlhttp=false;//创建一个新变量并赋值false,使用false作为判断条件说明还没有创建xmlhttprequest对象
function createxmlhttp(){
try{
xmlhttp=new xmlhttprequest();//尝试创建 xmlhttprequest 对象,除 ie 外的浏览器都支持这个方法。
}catch(e){
try{
xmlhttp=activexobject("msxml12.xmlhttp");//使用较新版本的 ie 创建 ie 兼容的对象(msxml2.xmlhttp)。
}catch(e){
try{
xmlhttp=activexobject("microsoft.xmlhttp");//使用较老版本的 ie 创建 ie 兼容的对象(microsoft.xmlhttp)。
}catch(failed){
xmlhttp=false;//如果失败了还保持false
}
}
}
return xmlhttp;
}
判断是否成功的例子:
if(!xmlhttp){
创建xmlhttp失败
}else{
创建xmlhttp成功
}
第二种方法:
if(typeof(xmlhttprequest)=="undefined" && window.activexobject){
function xmlhttprequest(){
var xmlhttp_arr=["msxml2.xmlhttp","microsoft.xmlhttp"];
var xmlhttp;
for(i=0;i<xmlhttp_arr.length;i++){
if(xmlhttp=new activexobject(xmlhttp_arr[i]))
break;
}
return xmlhttp;
}
}
//这个是除了ie之外的浏览器创建xmlhttprequest对象
var xmlhttp=new xmlhttprequest();
创建xmlhttp成功后,然后再来看看它的一些属性和方法吧,还有最重要的onreadystatechange事件句柄
方法:
open() 初始化http请求参数,包括url和http方法,但是不发送请求;
abort() 取消当前响应,关闭连接并断开所有网络未结束的活动;
getallresponseheaders() 把http响应头部作为未解析字符串返回;
getresponseheaders) 返回指定的http响应头的值;
send() 发送http请求使用传递给open()方法的参数,以及传个该方法的可选请求体;
setresponseheader() 向一个打开但没有发送的请求设置或添加一个http请求。
属性:
readystate 说明http请求的状态;(有5个状态分别是
0 表示没有初始化;
1 表示读取中
2 表示已读取
3 交互中(接受中)
4 完成
)
responsetext 说明为服务器接收到得响应体,如果没有接收到数据就返回空字符串;
responsexml 说明对请求的回应 解析为xml并用document对象返回;
status 说明http请求的状态;
statustext 说明http请求状态不是以数字形式而是用名称;
onreadystatechange 是readysate状态改变时调用事件的函数。
下面是一个发送请求数据并返回结果的xmlhttprequest对象;
生成一个xmlhttprequest对象
var xmlhttp=creatxmlhttp();
xmlhttp.open("get","//www.jb51.net/jaryle",true);
xmlhttp.onreadystatechange=getresult;
//怎么告诉xmlhttprequest 对象状态变化时让谁来处理这个变化呢用到二种方法:一种是匿名方法xmlhttp.onreadystatechange=function(){处理变化的代码}
另一种方法:指定方法:xmlhttp.onreadystatechange=getresult;
function getresult(){处理变化的代码}
xmlhttp.send();
function getresult(){
if(xmlhttp.readystate==4){ //当readystate的状态等于4时表示接收到数据
if(xmlhttp.status==200){ //这个时候就需要用到status属性,即由服务器返回的 http 状态代码。 xmlhttp.status 等于200时表示传输过程完整没有错误
alert(xmlhttp.responsetext);
}
}
}
注意:所以我们应该按照上面的流程来记忆:创建xmlhttprequest 对象 -> 指定发送地址及发送方法 -> 指定状态变化处理方法 -> 发送请求,请求发送后状态变化了就会自动调用指定的处理方法。