模仿jQuery封装ajax

function ajax(obj){
  var defaults = {
  	type: 'get',
  	url: '#',
  	data:{},
  	dataType: 'text',
    async : true,
    success: function(data){console.log(data)}
  };
 for(var key in obj){//遍历obj,key是键,比如usename:'ls',那么username是键,ls是值,处理形参,传递参数的时候就覆盖默认参数,不传递就使用默认参数
 	defaults[key] = obj[key];
 }
 var xhr = null;//1.创建XMLHttpReque对象
 if(window.XMLHttpRequest){
 	var xhr = new XMLHttpRequest();
 }else{//为了兼容ie6
 	var xhr = new ActiveXObject("microsoft.XMLHTTP");
 }
 var param = '';//吧对象形参的参数转化为字符串形式的参数
 for(var attr in defaults.data){
 	param +=attr+"="+defaults.data[attr]+"&";//把传递进来的地址进行分割
 }
 if(param){
 	param = param.substring(0,param.length-1);
 }
 if(defaults.type =="get"){
 	defaults.url += '?'+encodeURI(param);//encodeURI避免中文乱码
 }//2.准备发送(设置发送的参数)
 xhr.open(defaults.type,defaults.url,defaults.async);
 var data =null;//处理post请求参数并且设置请求头信息(必须设置)
 if (defaults.type =="post") {
    data =param;
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");//post传递必须要在表头加
 }
 xhr.send(data);//3.执行发送动作
 if(!defaults.async){//处理同步请求,不会调用回调函数
 	if(defaults.dataType =="json"){
 		return JSON.parse(xhr.responseText);
 	}else{
 		return xhr.responseText;
 	}
 }//指定回调函数(处理服务器响应数据)
 xhr.onreadystatechange=function(data){
 	if (xhr.readyState ==4) {
 		if(xhr.status ==200){
            var data = xhr.responseText;
            if(defaults.dataType =="json"){
            	data = JSON.parse(data);
            }
            defaults.success(data);
 		}
 	}
 }
}

猜你喜欢

转载自blog.csdn.net/bigfatDone/article/details/81237638