原生Ajax

创建XMLHttpRequest对象

FireFox内核浏览器存在XMLHttpRequest对象,可以直接new,但IE内核浏览器需要通过ActiveXObject来创建,具体代码如下:

var xmlHttp;
function createXMLHttp(){
	if(window.XMLHttpRequest){								//判断浏览器window是否存在XMLHttpRequest对象
		xmlHttp = new XMLHttpRequest();						//FireFox内核浏览器
	}else {
		xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");	//IE内核浏览器
	}
}

XMLHttpRequest对象的属性

No.属性描述
1onreadystatechange指定当readState状态改变时使用的操作,一般用于指定具体的回调函数
2readyState返回当前请求的状态,只读
3responseBody将回应信息正文以unsigned byte数组形式返回,只读
4responseStream以Ado Stream对象的形式返回响应信息,只读
5responseText接收以普通文本返回的数据,只读
6responseXML接收以XML文档形式返回的数据,只读
7status返回当前请求的http状态码,只读
8statusText返回当前请求的响应行状态,只读

readyState有5种取值

取值说明
0请求未发出,调用open()之前
1请求已建立,未发出,调用send()之前
2请求已发出,处理中,通常可以从响应种得到内容头部
3请求已处理,接收中,通常响应中有部分数据可用,但服务器未完成响应
4响应已完成

XMLHttpRequest对象的方法

No.方法描述
1abort()取得当前发出的请求
2getAllResponseHeaders()取得所有的HTTP头信息
3getResponseHeader(name)取得一个指定的HTTP头信息
4open(method, url)创建一个HTTP请求
5send(data)将创建的请求发送到服务器,并接收响应
6setRequestHeader(name, value)设置一个指定请求的HTTP头信息

对于setRequestHeader方法,并不是所有的Header都可以设置,有些Header是只能由User-Agent设置的,具体参考Forbidden header nameForbidden response header name

Text返回值示例

var xmlHttp, result;
function createXMLHttp(){
	if(xmlHttp){											//已经创建过了
		return;
	}
	if(window.XMLHttpRequest){								//判断浏览器window是否存在XMLHttpRequest对象
		xmlHttp = new XMLHttpRequest();						//FireFox内核浏览器
	}else {
		xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");	//IE内核浏览器
	}
}
function getAjax(url, callback){
	createXMLHttp();										//创建XMLHttpRequest对象
	xmlHttp.open("get", url);								//创建Http请求
	xmlHttp.onreadystatechange = function(){				//设置请求成功后的回调函数
		if(xmlHttp.readyState == 4){
			if(xmlHttp.status == 200){
				result = callback.call(result);				//调用回调函数
			}
		} 
	}
	xmlHttp.send(null);										//发送请求,get请求不传递任何参数
}
function postAjax(url, callback, data){
	createXMLHttp();										//创建XMLHttpRequest对象
	xmlHttp.open("post", url);								//创建Http请求
	xmlHttp.onreadystatechange = function(){				//设置请求成功后的回调函数
		if(xmlHttp.readyState == 4){
			if(xmlHttp.status == 200){
				result = callback.call(result);				//调用回调函数
			}
		} 
	}
	var params = null;
	if(data){												//拼接参数
		params = "";
		for(var i = 0; i < data.length; i++){
			params += data[i].name + "=" + data[i].value;
			if(i < data.length - 1){
				params += "&";
			}
		}
	}
	xmlHttp.send(params);									//发送请求
}
function callback(){
	var text = xmlHttp.responseText;
	document.getElementsByTagName("body")[0].innerHTML = text;
}

XML返回值示例

返回的XML文件——allarea.xml

<?xml version="1.0" encoding="GBK"?>
<allarea>
	<area>
		<id>1</id>
		<title>北京</title>
	</area>
	<area>
		<id>2</id>
		<title>天津</title>
	</area>
</allarea>

这里复用上一节中的方法,只需要重写callback即可,对XML的读取,可以按照文档树读取

function callback(){
	//读取XML最外层对象的所有子对象
	var allarea = xmlHttp.responseXML.getElementsByTagName("allarea")[0].childNodes;
	//循环读取城市
	for(var i = 0; i < allarea.length; i++){
		var id = allarea[i].getElementsByTagName("id")[0].firstChild.nodeValue;
		var title = allarea[i].getElementsByTagName("title ")[0].firstChild.nodeValue;
		console.info("area id = " + id + " and title = " + title);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值