Ajax请求GET/POST方法的封装

时间:2021-08-08 02:57:42
  1. XMLHttpRequest对象在大部分浏览器上已经实现而且拥有一个简单的接口允许数据从客户端传递到服务端,但并不会打断用户当前的操作


    1、建立XMLHttpRequest对象

    2、注册回调函数

    3、使用open方法设置和服务器交互的基本信息

    4、设置发送的数据,开始和服务器交互

    5、在回调函数中判断交互是否结束,响应是否正确,并根据需要获取服务器端返回的数据,更新页面内容。



  2. <!DOCTYPE html>
  3. <html lang="en">
  4. <head>
  5.     <meta charset="UTF-8">
  6.     <title>GET请求封装</title>
  7. </head>
  8. <body>
  9. <script type="text/javascript">
  10. // 方法
  11. // get(url, options, callback)    get是Ajax请求GET方法的封装
  12. // 参数
  13. // url    {String}    请求资源的url
  14. // options    {Object}    请求的查询参数
  15. // callback    {Function}    请求的回调函数,接收XMLHttpRequest对象的responseText属性作为参数
  16. // 返回
  17. // void
  18. function get(url,options,callback){//定义get函数
  19.     //查询参数序列化
  20.     function serialize(options){
  21.         if(!options){//如果没有查询参数
  22.             return "";//返回空字符
  23.         }else{//否则
  24.             var pairs=[];//定义一个数组
  25.             for(var name in options){//遍历对象属性
  26.                 if(!options.hasOwnProperty(name)) continue;//过滤掉继承的属性和方法
  27.                 if(typeof options[name]==="function") continue;//过滤掉方法
  28.                 var value=options[name].toString();//属性值转字符串
  29.                 name=encodeURIComponent(name);//URI编码
  30.                 value=encodeURIComponent(value);//URI编码
  31.                 pairs.push(name+"="+value);//属性名和属性值放入数组
  32.             }
  33.             return pairs.join("&");//返回字符串
  34.         }
  35.     }
  36.     var xhr=new XMLHttpRequest();//创建Ajax对象
  37.     xhr.open("get",url+'?'+serialize(options));//开启一个异步请求
  38.     xhr.send(null);//发送请求
  39.     xhr.onreadystatechange=function(){//注册事件 处理返回数据
  40.         if(xhr.readyState==4){//若请求完毕
  41.             if(xhr.status>=200&&xhr.status<300||xhr.status==304){//若请求成功
  42.                 callback(xhr.responseText);//调用回调函数处理响应结果
  43.             }else{//若请求失败
  44.                 alert('Requst was unsuccessful:'+xhr.status);//返回请求失败原因
  45.             }
  46.         }
  47.     }  
  48. }
  49. //举例
  50. // get("/information",{name: "netease", age: 18},function (data) {
  51. //     console.log(data);
  52. // });
  53. </script>
  54. </body>
  55. </html>


  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>POST请求封装</title>
  6. </head>
  7. <body>
  8. <script type="text/javascript">
  9. // post函数是对Ajax的POST请求的封装,语法如下:
  10. //     post(url, options, callback)
  11. // 没有返回值,参数说明如下:
  12. //     url:请求资源的url,String类型
  13. //     options:请求的查询参数,Object类型
  14. //     callback:回调函数,接收XMLHttpRequest对象的responseText属性作为参数,Function类型
  15.  
  16. function post(url,options,callback){//定义post函数
  17.     //查询参数序列化
  18.     function serialize(options){
  19.         if(!options){//如果没有查询参数
  20.             return "";//返回空字符
  21.         }else{//否则
  22.             var pairs=[];//定义一个数组
  23.             for(var name in options){//遍历对象属性
  24.                 if(!options.hasOwnProperty(name)) continue;//过滤掉继承的属性和方法
  25.                 if(typeof options[name]==="function") continue;//过滤掉方法
  26.                 var value=options[name].toString();//属性值转字符串
  27.                 name=encodeURIComponent(name);//URI编码
  28.                 value=encodeURIComponent(value);//URI编码
  29.                 pairs.push(name+"="+value);//属性名和属性值放入数组
  30.             }
  31.             return pairs.join("&");//返回字符串
  32.         }
  33.     }
  34.     //创建Ajax对象
  35.     if(XMLHttpRequest){
  36.         var xhr=new XMLHttpRequest();
  37.     }else{
  38.         var xhr=new ActiveXObject("Microsoft.XMLHTTP");//兼容ie
  39.     }
  40.      
  41.     xhr.open("post",url);//开启一个异步请求
  42.     xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");//设置请求头部
  43.     xhr.send(serialize(options));//发送请求
  44.     xhr.onreadystatechange=function(){//注册事件 处理返回数据
  45.         if(xhr.readyState==4){//若请求完毕
  46.             if(xhr.status>=200&&xhr.status<300||xhr.status==304){//若请求成功
  47.                 callback(xhr.responseText);//调用回调函数处理响应结果
  48.             }else{//若请求失败
  49.                 alert('Requst was unsuccessful:'+xhr.status);//返回请求失败原因
  50.             }
  51.         }
  52.     }  
  53. }
  54. // 使用示例如下:
  55.      //  post('/addUser', {name: 'jerry', age: 1}, function(data) {
  56.      //    //处理返回数据
  57.      // });
  58. </script>
  59. </body>
  60. </html>