js 原生ajax封装

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/document_dom/article/details/88558790
/*
	通用的ajax请求函数
	@param type get、post  请求方式
	@param url 
	@param isAsync true false   true:异步,false:同步
	@param data  object
	@param callback function
 */

function doAjax(type, url, isAsync, data, callback) {
	//创建通信对象
	var xhr = createXhr();

	//判断通信类型
	if (type.toLowerCase() === "get") {
		//遍历拼接数据到url
		url += "?";
		for (var n in data) {
			url += n + "=" + data[n] + "&";
		}
		//截掉最后一位
		url = url.substr(0, url.length - 1)
		//释放data
		data = null;
	} else {
		data = JSON.stringify(data);
	}

	//初始化通信对象
	xhr.open(type, url, isAsync);
	//发送请求
	xhr.send(data);
	//设置请求头
	xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded;charset=UTF-8");

	//监听readyState变化
	xhr.onreadystatechange = function () {
		if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304) {
			if (xhr.readyState === 4) {
				var data = JSON.parse(xhr.responseText);
				//传递给回调函数
				callback && callback(data);
			}
		}
	};
}

//创建通信对象
function createXhr() {
	//大部分浏览器中使用XMLHttpRequest创建通信对象
	if (typeof XMLHttpRequest !== "undefined") {
		return new XMLHttpRequest();
	} else {
		//IE6及ie6以下浏览器不支持XMLHttpRequest 这些浏览器使用ActiveXObject创建通信对象,在创建对象是需要根据浏览器具体版本传入不同的参数 如下: "MSXML.XMLHttp.6.0","MSXML.XMLHttp.3.0","MSXML.XMLHttp", "Microsoft.XMLHTTP"
		var args = ["MSXML.XMLHttp.6.0", "MSXML.XMLHttp.3.0", "MSXML.XMLHttp", "Microsoft.XMLHTTP"];
		for (var n = 0; n < args.length; n++) {
			//异常处理
			try {
				var xhr = new ActiveXObject(args[n]);
				return xhr;
			} catch (e) {
				console.log(e);
			}
		}
	}
}

猜你喜欢

转载自blog.csdn.net/document_dom/article/details/88558790