原生ajax及其封装

ajax在网页端局部刷新和App端接口使用。封装在App端实用。

原生:

//get请求

//1、创建XMLHttpRequest对象
var xhr = null;
if(window.XMLHttpRequest){
    xhr = new XMLHttpRequest();
}else{
    //兼容ie6
    xhr = new ActiveXObject("Microsoft.XMLHTTP");
}

/**
 * 2、准备发送。
 * 参数一是请求方式,
 * 参数二是请求地址及参数,
 * 参数三是异步请求或同步请求,
 * 同步请求时有请求存在时会卡在这个请求处,不能进行其他任何操作
*/
xhr.open('get',url + '?' + params,true);

/**
 * 3、发送
*/
xhr.send(null);

//4、发送成功后获取请求结果,在请求是异步请求时,使用如下方式获取请求结果
xhr.onreadystatechange = function(){
    if(xhr.readystate == 4){
        if(xhr.status == 200){
            var result = xhr.responseText;//xhr.responseXML;
            //根据具体业务,做具体处理
            /**
             * 如果返回的是json数据,可通过JSON.parse将json字符串转换成json对象使用;
             * 如果返回的是XML格式数据,可通过document.getElementsByName处理
             * 如果是文字字符串,直接使用
            */
        }
    }
}

//4、在请求是同步请求时,使用如下方式获取请求结果
if(xhr.readystate == 4){
    if(xhr.status == 200){
        var result = xhr.responseText;//xhr.responseXML;
        //根据具体业务,做具体处理
        /**
         * 如果返回的是json数据,可通过JSON.parse将json字符串转换成json对象使用;
         * 如果返回的是XML格式数据,可通过document.getElementsByName处理
         * 如果是文字字符串,直接使用
        */
    }
}
//post方式请求

var xhr = null;
if(window.XMLHttpRequest){
    xhr = new XMLHttpRequest();
}else{
    xhr = new ActiveXObject("Microsoft.XMLHTTP");
}

xhr.open("post",url,true);
xhr.send(params);
xhr.onreadystatechange = function(){
    if(xhr.readystate == 4){
        if(xhr.status == 200){
            var result = xhr.responseText;//xhr.responseXML;
        }
    }
}

封装:

/**
 * ajax的封装
 * 使用传入obj的方式解决参数的顺序不可改变
 * 定义默认对象,解决参数没有默认值,每次都要传值的问题
 */
function myAjax(obj){
	var  defaults = {
		type: "get",
		url: "#",
		dataType: "json",
		data: {},
		async: true,
		success: function(result){
			console.log(result);
		}
	};
	
	/**
	 * obj中的属性,覆盖到defaults中的属性
	 * 1、如果有一些属性只存在obj中,会给defaults中增加属性
	 * 2、如果有一些属性在obj和defaults中都存在,会将defaults中的默认值覆盖
	 * 3、如果有一些属性只在defaults中存在,在obj中不存在,这时候defaults中将保留预定义的属性
	 */
	for(var key in obj){
		defaults[key] = obj[key];
	}
	
	//1、创建对象
	var xhr = null;
	if(window.XMLHttpRequest){
		xhr = new XMLHttpRequest();
	}else{
		xhr = new ActiveXObject("Microsoft.XMLHTTP");
	}
	
	//组装params
	var params = {};
	for(var attr in defaults.data){
		params += attr + "=" + defaults.data[attr] + "&";
	}
	//去除params最后的&
	if(params){
		params = params.substring(0,params.length - 1);
	}
	if(defaults.type == 'get'){
		defaults.url = defaults.url + "?" + params;
	}
	
	//2、准备发送
	xhr.open(defaults.type,defaults.url,defaults.async);
	
	//3、发送
	if(defaults.type == 'get'){
		xhr.send(null);
	}else if(defaults.type == 'post'){
		xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		xhr.send(params);
	}
	
	//4、回调
	if(defaults.async){ //异步
		xhr.onreadystatechange = function(){
			if(xhr.readystate == 4){
				if(xhr.status == 200){
					var result = null;
					if(defaults.dataType == 'json'){
						result = xhr.responseText;
						result = JSON.parse(result);
					}else if(defaults.dataType == 'xml'){
						result = xhr.responseXML;
					}else{
						result = xhr.responseText;
					}
					defaults.success(result);
				}
			}
		}
	}else { //同步
		if(xhr.readystate == 4){
			if(xhr.status == 200){
				var result = null;
				if(defaults.dataType == 'json'){
					result = xhr.responseText;
					result = JSON.parse(result);
				}else if(defaults.dataType == 'xml'){
					result = xhr.responseXML;
				}else{
					result = xhr.responseText;
				}
				defaults.success(result);
			}
		}
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值