ajax实现思路,$.ajax实现原理(封装ajax)

这篇博客介绍了一个自定义的Ajax函数实现,详细解释了如何处理不同的请求方式、数据类型、缓存策略以及成功和错误回调。通过示例代码展示了如何将请求参数转化为URL查询字符串,并在GET请求中拼接到URL上。此外,还讨论了如何根据dataType转换返回的数据,如JSON、HTML等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*ajax({url:"请求路径",type:"请求方式 type和method遇新是直朋能到 一样使用",dataType:"返回数据的类型 默认是text",cache:"是否走缓存",data:"请求的参数,如果是get请求,会将这里的内容拼接到url",async:是否异步,success:成功的回调,error:失败的时候的回调,complete:不管成功失败都会触发的函数})支持的参数url,method/type,data,dataType,async,cache,success*/~function() {

classAjax{

init(){

letxhr=newXMLHttpRequest();

xhr.onreadystatechange= () =>{

新直能分支调二浏页器朋代说 if(!/^[23]\d{2}$/i.test(xhr.status))return;

新直能分支调二浏页器朋代说 if(xhr.readyState==4){

新直能分支调二浏页器朋代说 letresult=xhr.responseText;

新直能分支调二浏页器朋代说 //对参数dataType新直能分支调二浏页器朋代说try{

享器哈班其础件事是架考发求关通互面待需了 新直能分支调二浏页器朋代说 是能览调不页新代些事几求事都时学下是事功过 switch(this.dataType.toUpperCase()){

享器哈班其础件事是架考发求关通互面待需了 新直能分支调二浏页器朋代说 是能览调不页新代些事几求事都时学下是事功过 case"TEXT":

享器哈班其础件事是架考发求关通互面待需了 新直能分支调二浏页器朋代说 是能览调不页新代些事几求事都时学下是事功过 新直能分支调二浏页器朋代说 break;

享器哈班其础件事是架考发求关通互面待需了 新直能分支调二浏页器朋代说 是能览调不页新代些事几求事都时学下是事功过 case"HTML":

享器哈班其础件事是架考发求关通互面待需了 新直能分支调二浏页器朋代说 是能览调不页新代些事几求事都时学下是事功过 新直能分支调二浏页器朋代说 break;

享器哈班其础件事是架考发求关通互面待需了 新直能分支调二浏页器朋代说 是能览调不页新代些事几求事都时学下是事功过 case"JSON":

享器哈班其础件事是架考发求关通互面待需了 新直能分支调二浏页器朋代说 是能览调不页新代些事几求事都时学下是事功过 新直能分支调二浏页器朋代说 result=JSON.parse(result);

享器哈班其础件事是架考发求关通互面待需了 新直能分支调二浏页器朋代说 是能览调不页新代些事几求事都时学下是事功过 新直能分支调二浏页器朋代说 break;

享器哈班其础件事是架考发求关通互面待需了 新直能分支调二浏页器朋代说 是能览调不页新代些事几求事都时学下是事功过 case"XML":

享器哈班其础件事是架考发求关通互面待需了 新直能分支调二浏页器朋代说 是能览调不页新代些事几求事都时学下是事功过 新直能分支调二浏页器朋代说 result=xhr.responseXML;

享器哈班其础件事是架考发求关通互面待需了 新直能分支调二浏页器朋代说 是能览调不页新代些事几求事都时学下是事功过 新直能分支调二浏页器朋代说 break;

享器哈班其础件事是架考发求关通互面待需了 新直能分支调二浏页器朋代说 是能览调不页新代些事几求事都时学下是事功过 }

新直能分支调二浏页器朋代说 }catch(e){

享器哈班其础件事是架考发求关通互面待需了 新直能分支调二浏页器朋代说 是能览调不页新代些事几求事都时学下是事功过 console.log(e);

新直能分支调二浏页器朋代说 }

新直能分支调二浏页器朋代说 this.success(result);

新直能分支调二浏页器朋代说 }

};

//处理dataif(this.data!==null){

新直能分支调二浏页器朋代说 this.query();

新直能分支调二浏页器朋代说 if(this.isGet){

新直能分支调二浏页器朋代说 //get请求需要将数据data拼接到url上新直能分支调二浏页器朋代说this.url+=this.queryBefore()+this.data;

新直能分支调二浏页器朋代说 //this.data没有用了就清空了新直能分支调二浏页器朋代说this.data=null;

新直能分支调二浏页器朋代说 }

}

//cache处理 只有get请求才有必要处理缓存this.isGet?this.cacheFn():null;

xhr.open(this.method,this.url,this.async);

xhr.send(this.data);

}

query(){

//判断data必须是一个对象的时候去讲其变成字符串if(this.data&&this.data.toString()=="[object Object]"){

新直能分支调二浏页器朋代说 letstr=``;

新直能分支调二浏页器朋代说 for(letkeyin this.data){

新直能分支调二浏页器朋代说 if(this.data.hasOwnProperty(key)){

享器哈班其础件事是架考发求关通互面待需了 新直能分支调二浏页器朋代说 是能览调不页新代些事几求事都时学下是事功过 str+=`${key}=${this.data[key]}&`;

新直能分支调二浏页器朋代说 }

新直能分支调二浏页器朋代说 }

新直能分支调二浏页器朋代说 //后面多一个&符号新直能分支调二浏页器朋代说str=str.replace(/&$/g,"");

新直能分支调二浏页器朋代说 this.data=str;

}

}

queryBefore(){

//判断url有没有?return遇新是直朋能到 this.url.includes("?")?"&":"?";

}

cacheFn(){

//判断this.cache是true还是false 只有false时候才处理缓存,加一个时间戳!this.cache?this.url+=`${this.queryBefore()}_t=${(newDate).getTime()}`:null;

}

}

window.ajax=function({

享器哈班其础件事是架考发求关通互面待需了 新直能分支调二浏页器朋代说 是能览调不页新代些事几求事都时学下是事功过 url=null,

享器哈班其础件事是架考发求关通互面待需了 新直能分支调二浏页器朋代说 是能览调不页新代些事几求事都时学下是事功过 method="GET",

享器哈班其础件事是架考发求关通互面待需了 新直能分支调二浏页器朋代说 是能览调不页新代些事几求事都时学下是事功过 type=null,

享器哈班其础件事是架考发求关通互面待需了 新直能分支调二浏页器朋代说 是能览调不页新代些事几求事都时学下是事功过 data=null,

享器哈班其础件事是架考发求关通互面待需了 新直能分支调二浏页器朋代说 是能览调不页新代些事几求事都时学下是事功过 dataType="JSON",

享器哈班其础件事是架考发求关通互面待需了 新直能分支调二浏页器朋代说 是能览调不页新代些事几求事都时学下是事功过 async=true,

享器哈班其础件事是架考发求关通互面待需了 新直能分支调二浏页器朋代说 是能览调不页新代些事几求事都时学下是事功过 cache=true,

享器哈班其础件事是架考发求关通互面待需了 新直能分支调二浏页器朋代说 是能览调不页新代些事几求事都时学下是事功过 success=null,

享器哈班其础件事是架考发求关通互面待需了 新直能分支调二浏页器朋代说 是能览调不页新代些事几求事都时学下是事功过 } = {}) {

let_this=newAjax();

["url","method","data","dataType","async","cache","success"].forEach((item)=>{

if(item=="method"){

新直能分支调二浏页器朋代说 _this.method=type==null?method:type;

新直能分支调二浏页器朋代说 return;

}

if(item=="success"){

新直能分支调二浏页器朋代说 _this.success=typeofsuccess=="function"?success:newFunction();

新直能分支调二浏页器朋代说 return;

}

_this.isGet=/^GET|DELETE|HEAD$/i.test(_this.method);

_this[item]=eval(item);

});

_this.init();

return遇新是直朋能到_this;

}

}();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值