• ajax封装


        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);//失败后返货的状态码
      		}
      	}
      }                
    }
    

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

  • 相关阅读:
    DockerPush
    DockerInstall
    DockerFile
    基于虚拟机实例/java程序线程的虚拟机内存分配
    Class文件结构及方法中的指令
    JAVA类型生命周期的开始阶段和使用阶段/以及创建对象的几种方式
    。。。。。毕业季
    PCA算法
    ffmpeg将图片转为视频
    Linux下使用bgslibrary的OpenCv库
  • 原文地址:https://www.cnblogs.com/lixuekui/p/8690378.html
Copyright © 2020-2023  润新知