博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ajax封装
阅读量:7129 次
发布时间:2019-06-28

本文共 2514 字,大约阅读时间需要 8 分钟。

    ajax想必做前端开发的,没有不对冲熟悉的,异步获取数据,不用刷新整个页面,局部dom刷新就可以进行前后交互,前后的基本流程大概如下:

       ①先本地创建一个XMLHttpRequest对象,var xmlHttp = new XMLHttpRequest();

  ②创建连接,xmlHttp.open('GET','demo.php','true');

  ③向后台发送请求,xmlHttp.send();

  ④根据返回状态处理数据,xmlHttp.onreadystatechange = function(){

 

        
if
(xmlHttp.readyState === 4 & xmlHttp.status === 200){

 

        
}

 

    
}。
 
   上述只是简单的一个ajax的介绍,具体在工作中使用的话,需要把各种情况考虑到,进而对ajax,进行封装处理,下面将仔细进行如下解析:
  ①:把json对象转换为字符串的一个封装函数,下面用get请求的话需要拼接url.
   function json2url(json){
    json.t = Math.random();
    var arr = [];
    for(var name in json){
      arr.push(name+"="+encodeURIComponent(json[name]));/字符转换  防止乱码
    }
    return arr.join("&");
  }
   
  ②个人理解对ajax,进行了封装,考虑了不同浏览器的兼容性,考虑了请求超时 ,成功,失败三种情况下的处理,考虑了不同请求方式  get  post 考虑了乱码情况等。
function jaxa(json){	//默认值  json = json || {};  if(!json.url)return;  json.data = json.data || {};//请求后台数据需要的字段  json.type = json.type || "GET";//请求方式  json.timeout = json.timeout || 10000;//请求超时默认时间  if(window.XMLHttpRequest){//chrome fixefox 高级浏览器    var oAjax = new XMLHttpRequest();  }else{//IE浏览器  	var oAjax = new ActiveXObject("MIcrosoft.XMLHTTP");  }  //建立连接 是否异步  switch(json.type.toLowerCase()){//两种不同方式进行不同的建立方式  	case "get":  	oAjax.open("GET",json.url+"?"+json2url(json.data),true);  	//get  GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连  	oAjax.send();//发送  	break;  	case "post":  	oAjax.open("POST",json.url,true);  	oAjax.setRequestHeader("Content-Type","application/x-www-from-urlencoded");  	oAjax.send(json2url(json.data));//发送  	//POST把提交的数据则放置在是HTTP包的包体中。需要send的时候把字符串类型的data发给后台。  	break;  }     json.loading&&json.loading();//请求数据时可以做相应的加载设计 比如增加加载条等。  var timer = setTimeout(function(){//规定时间内是否请求道数据 请求不到数据的话 请求失败的处理  	json.complete&&json.complete();//请求失败需要做的事情  	json.error&&json.error(oAjax.status);//失败后返货的状态码  	oAjax.onreadystatechange = null;//把创建的对象 变为空 让垃圾回收机制回收  },json.timeout);  //接收  当网络状态进行改变的时候 函数  oAjax.onreadystatechange = function(){  	if(oAjax.readyState === 4){//网络状态为4正常情况下  		if(oAjax.status > 200 && oAjax.status < 304 || oAjax.status === 304){//aJax状态码 200 到300 之间是成功  304是重定向也是成功  			clearTimeout(timer);//完成了就得把创建的定时器关掉 也就不再看请求是否超时   			json.complete&&json.complete();//成功后需要做的事儿  			json.success&&json.success(oAjax.responseText);//成功后返回成功状态数据。  		}else{//不在上述状态码区间的 为请求失败  			clearTimeout(timer);//请求失败,也就不再看请求是否超时 关闭定时器  			json.complete&&json.complete();//失败了做的事儿  			json.error&&json.error(oAjax.status);//失败后返货的状态码  		}  	}  }                }

  不合理的地方 大家多多指教,谢谢。

转载于:https://www.cnblogs.com/lixuekui/p/8690378.html

你可能感兴趣的文章
微软Build 2017第二天:跨平台跨硬件开发体验
查看>>
精益项目管理的可行性分析
查看>>
Bitbucket Pipelines在Atlassian的Bitbucket云上提供持续交付功能
查看>>
举重若轻的人人车移动端数据平台
查看>>
建立自组织敏捷团队
查看>>
PayPal API风格指南和设计模式
查看>>
02-Docker新手入门网络篇
查看>>
大神 Linus Torvalds 语录
查看>>
[LintCode/LeetCode] Find Median From / Data Stream Median
查看>>
Android开发套路收集整理与讨论
查看>>
代码规范的重要性,我已经放弃治疗
查看>>
笨办法学C 练习30:自动化测试
查看>>
mui初级入门教程(五)— 聊聊即时通讯(IM),基于环信 web im SDK
查看>>
[vs2008]Visual Studio 2008 SP1添加或删除功能提示查找SQLSysClrTypes.msi文件
查看>>
JS 设计模式二(封装)
查看>>
JavaScript “跑马灯”抽奖活动代码解析与优化(一)
查看>>
为什么我们选择 segmentfault 写作?
查看>>
多模型融合推荐算法在达观数据的运用
查看>>
JDK 11 马上就要来了!JDK 12 还会远吗?
查看>>
Kali Linux 2019.1 发布,Metasploit 更新到 5.0 版本
查看>>