原生js封装ajax的get、post方法

您所在的位置:网站首页 原生ajax请求兼容写法错误 原生js封装ajax的get、post方法

原生js封装ajax的get、post方法

#原生js封装ajax的get、post方法| 来源: 网络整理| 查看: 265

 公共方法提取: function params(json){ let paramArr = [] for (let p in json) { paramArr.push(p + '=' + json[p]) } return paramArr.join('&') } HTTP请求过程

(1)建立TCP链接

(2)web浏览器向web服务器发送请求命令

(3)web浏览器发送请求头信息

(4)web服务器应答

(5)web服务器发送应答头信息

(6)web浏览器向浏览器发送数据

(7)web服务器关闭TCP链接

readyState 状态说明:表示请求/响应过程的当前活动阶段

readyState有五种可能的值:  0 (未初始化): (XMLHttpRequest)对象已经创建,但还没有调用open()方法。  1 (载入):已经调用open() 方法,但尚未发送请求。  2 (载入完成): 请求已经发送完成。  3 (交互):可以接收到部分响应数据。  4 (完成):已经接收到了全部数据,并且连接已经关闭。 (0)未初始化  此阶段确认XMLHttpRequest对象是否创建,并为调用open()方法进行未初始化作好准备。值为0表示对象已经存在,否则浏览器会报错--对象不存在。  (1)载入  此阶段对XMLHttpRequest对象进行初始化,即调用open()方法,根据参数(method,url,true)完成对象状态的设置。并调用send()方法开始向服务端发送请求。值为1表示正在向服务端发送请求。  (2)载入完成  此阶段接收服务器端的响应数据。但获得的还只是服务端响应的原始数据,并不能直接在客户端使用。值为2表示已经接收完全部响应数据。并为下一阶段对数据解析作好准备。  (3)交互  此阶段解析接收到的服务器端响应数据。即根据服务器端响应头部返回的MIME类型把数据转换成能通过responseBody、responseText或responseXML属性存取的格式,为在客户端调用作好准备。状态3表示正在解析数据。  (4)完成  此阶段确认全部数据都已经解析为客户端可用的格式,解析已经完成。值为4表示数据解析完毕,可以通过XMLHttpRequest对象的相应属性取得数据。  概而括之,整个XMLHttpRequest对象的生命周期应该包含如下阶段: 创建-初始化请求-发送请求-接收数据-解析数据-完成 

xhr对象status属性:响应的HTTP状态

status的值

1XX:信息类,表示收到web浏览器请求,正在进一步处理中

2XX:成功,表示用户请求被正确接收

3XX:重定向,表示请求没成功,需要客户采取进一步的动作(304表示请求的资源未修改,可以直接使用浏览器的缓存版本)

4XX:客户端错误,表示客户端提交的请求有错误,如:404 Not Found,意味着请求中所引用的文档不存在

5XX:服务器错误,表示服务器不能完成对请求的处理

ajax封装get /*ajax封装-get        @param url:请求的路径        @param data:发送的数据,格式:{key1:value1,key2:value2}        @param callback:回调函数,方便用户处理自己的数据,传递逻辑 */ function get(url, data, callback){        //创建异步对象         var xhr = null if (window.XMLHttpRequest) { xhr = new XMLHttpRequest(); } else if(window.ActiveXObject) {//IE6及以下 xhr = new ActiveXObject('Microsoft.XMLHTTP'); }        //判断data是否为空        if(data){            url=url+'?'+params(data);        }        //设置请求行        xhr.open('get',url);        //设置请求头(get可以省略)        //注册回调函数        xhr.onreadystatechange = function(){             if(xhr.readyState==4&&xhr.status==200){                 //调用传递的回调函数                 callback(xhr.responseText);             }        }        //发送请求主体        xhr.send(null); }

调用方式:

get('url',{key1:1,key2:3},function (data){       console.log(data); } }); ajax封装post /*ajax封装-post        @param url:请求的路径        @param data:发送的数据,格式:{key1:value1,key2:value2}        @param callback:回调函数,方便用户处理自己的数据,传递逻辑 */ function post(url, data, callback){        //创建异步对象         var xhr = null if (window.XMLHttpRequest) { xhr = new XMLHttpRequest(); } else if(window.ActiveXObject) {//IE6及以下 xhr = new ActiveXObject('Microsoft.XMLHTTP'); }        //设置请求行        xhr.open('post',url);        //设置请求头(post有数据发送才需要设置请求头)        //判断是否有数据发送        if(data){              xhr.setRequestHeader('content-type','application/x-www-form-urlencoded');        }        //注册回调函数        xhr.onreadystatechange = function(){              if(xhr.readyState==4&&xhr.status==200){                  //调用传递的回调函数                  callback(xhr.responseText);              }        }        //发送请求主体        xhr.send(data); }

调用方式:

post('url',{key1:1,key2:3},function (data){       console.log(data); } }); ajax封装 /*ajax封装        @param option:传入一个对象        url:请求的路径        type:请求的不同类型get或post        data:发送的数据,格式:{key1:value1,key2:value2}        callback:回调函数,方便用户处理自己的数据,传递逻辑            */ function myAjax(option){        //创建异步对象        var xhr = null if (window.XMLHttpRequest) { xhr = new XMLHttpRequest(); } else if(window.ActiveXObject) {//IE6及以下 xhr = new ActiveXObject('Microsoft.XMLHTTP'); }        //如果是get并且有数据        if(option.type=='get'&&option.data){             option.url=option.url+'?'+params(option.data);        }        //设置请求行        xhr.open(option.type,option.url);        //设置请求头(post有数据发送才需要设置请求头)        //判断是否有数据发送        if(option.type=='post'&&option.data){              xhr.setRequestHeader('content-type','application/x-www-form-urlencoded');        }        //注册回调函数        xhr.onreadystatechange = function(){              if(xhr.readyState==4&&xhr.status==200){                  //接收返回的数据类型                  var type = xhr.getResponseHeader('Content-Type');                  //json格式                  if(type.indexOf('json')!=-1){                       option.callback(JSON.parse(xhr.responseText));                  }                  //xml格式                  else if(type.indexOf('xml')!=-1){                       option.callback(xhr.responseXML);                  }                  //普通格式                  else{                       option.callback(xhr.responseText);                  }              }        }        //发送请求主体        //判断不同的请求类型        xhr.send(option.type=='post'?option.data:null); }

调用方式:

myAjax({      url:'url',      type:'post',      data:{key1:1,key2:3},      callback:function (data){       console.log(data); } });



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3