ajax原生

ajax并不算是一种新的技术,可以说是已有技术的一种组合,主要用来实现客户端与服务端的异步通信效果,实现页面的局部刷新,早期的浏览器并不能原生的支持ajax,可以使用iframe方式变相实现异步效果,后来的浏览器提供了对ajax的支持。

ajax的基本过程
1创建XMLHTTPRequest对象,也就是创建一个异步调用对象
2创建一个新的HTTP请求,并指定该HTTP请求的方法,url及验证信息
3设置相应HTTP请求状态变化的函数
4发送HTTP请求
5获取异步调用返回的数据
6使用JavaScript和Dom实现局部刷新

 //最简单的请求过程
 var  xhr = new XMLHttpRequest();
 xhr.open("type","url",true);//true代表异步 url 请求地址  type 表示请求姿势;
 //通过实践监听状态。
 xhr.onreadystatechange=function(){
     if(xhr.readyState == 4 && xhr.status==200){
         console.log(xhr.responseText);//请求成功后
     }
 }
 xhr.send();

封装get 与post的ajax数据交互过程


```css
function ajax(options){
var {type,url.success,data}=options
  type=type||"get";
  data=data||{};
  var str="";
  for(var i in data){
      str+=`${i}=${data[i]}&`;
  }
  if(type=="get"){
    var d=new Date();
    url=url+"?"+str+"__ss="+d.getTime();//为什么增加时间戳  
  }
  var ajax=newXMLHTTPRequest();
  ajax.open(type,url,true)
  ajax.readystatechange=function(){
      if(ajax.readystate==4&&ajax.status==200){
          success(ajax.responseText)
      }
  }
  if(type=="get"){
  	ajax.send(str)
  };
  else if(type=="post"){
    ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    ajax.send(str.slice(0,str.length-1))
  }
}

jsonp解决跨域封装

function jsonp(url,success,data){
    data=data||{}
    var str="";
    for(var i in data){
        str+=`${i}=${data[i]}&`
    }
    url=url+"?"+str
    var script=document.creatElement("script");
    script.src=url
	document.body.appendChild(script)
	window[data[data.columnName]]=function(res){
   	 		success(res)
	}
}

三合一封装(ajax的post,get和jsonp)

function ajax(options){
 var {type,url,success,error,data,timeout}=options
  	 type=type||"get";
  	 data=data||{};
  	 timeout=timeout||1000;
 var str="";
 for(var i in data){
     str+=`${[i]}=${data[i]}&`
 }
 if(type=="get"||type=="jsonp"){
     var d=Date();
     url=url+"?"+str+"__sd="+d.gettime();
 }
 if(type=="jsonp"){
     var script=document.createElement("script")
     script.src=url
     document.body.appendChild(script)
     window[data[data.columnName]]=function(res){
         success&&success(res);
         error=null;
     }
     setTimeout(()=>{
         error&&error();
         success=null;
     },timeout)
 }else{
          var xhr = new XMLHTTPRequest();
    	  xhr.open(type,url,true)
    	  xhr.onreadystatechange=function(){
          	if(xhr.readyState==4&&xhr.status==200){
             	success(xhr.responseText)
            }else if(xhr.readyState==4&&xhrstatus!=200){
            	 error&&error(xhr.status)
         	}
          }
          if(type=="get"){
          		xhr.send(str);
          }else if(type=="post"){
          	xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
          	xhr.send(str.slice(0,str.length-1))
          }   	
 }  
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值