加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

JavaScript常用工具方法封装

发布时间:2019-02-14 20:03:07 所属栏目:优化 来源:佚名
导读:JavaScript 1. type 类型判断 isString(o){//是否字符串 returnObject.prototype.toString.call(o).slice(8,-1)==='String' } isNumber(o){//是否数字 returnObject.prototype.toString.call(o).slice(8,-1)==='Number' } isBoolean(o){//是否boolean retu

6. Http

  1. /** 
  2.  * @param  {setting} 
  3.  */ 
  4. ajax(setting){ 
  5.     //设置参数的初始值 
  6.     var opts={ 
  7.         method: (setting.method || "GET").toUpperCase(), //请求方式 
  8.         url: setting.url || "", // 请求地址 
  9.         async: setting.async || true, // 是否异步 
  10.         dataType: setting.dataType || "json", // 解析方式 
  11.         data: setting.data || "", // 参数 
  12.         success: setting.success || function(){}, // 请求成功回调 
  13.         error: setting.error || function(){} // 请求失败回调 
  14.     } 
  15.  
  16.     // 参数格式化 
  17.     function params_format (obj) { 
  18.         var str = '' 
  19.         for (var i in obj) { 
  20.             str += i + '=' + obj[i] + '&' 
  21.         } 
  22.         return str.split('').slice(0, -1).join('') 
  23.     } 
  24.  
  25.     // 创建ajax对象 
  26.     var xhr=new XMLHttpRequest(); 
  27.  
  28.     // 连接服务器open(方法GET/POST,请求地址, 异步传输) 
  29.     if(opts.method == 'GET'){ 
  30.         xhr.open(opts.method, opts.url + "?" + params_format(opts.data), opts.async); 
  31.         xhr.send(); 
  32.     }else{ 
  33.         xhr.open(opts.method, opts.url, opts.async); 
  34.         xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 
  35.         xhr.send(opts.data); 
  36.     } 
  37.  
  38.     /* 
  39.     ** 每当readyState改变时,就会触发onreadystatechange事件 
  40.     ** readyState属性存储有XMLHttpRequest的状态信息 
  41.     ** 0 :请求未初始化 
  42.     ** 1 :服务器连接已建立 
  43.     ** 2 :请求已接受 
  44.     ** 3 : 请求处理中 
  45.     ** 4 :请求已完成,且相应就绪 
  46.     */ 
  47.     xhr.onreadystatechange = function() { 
  48.         if (xhr.readyState === 4 && (xhr.status === 200 || xhr.status === 304)) { 
  49.             switch(opts.dataType){ 
  50.                 case "json": 
  51.                     var json = JSON.parse(xhr.responseText); 
  52.                     opts.success(json); 
  53.                     break; 
  54.                 case "xml": 
  55.                     opts.success(xhr.responseXML); 
  56.                     break; 
  57.                 default: 
  58.                     opts.success(xhr.responseText); 
  59.                     break; 
  60.             } 
  61.         } 
  62.     } 
  63.  
  64.     xhr.onerror = function(err) { 
  65.         opts.error(err); 
  66.     } 
  67.  
  68. /** 
  69.  * @param  {url} 
  70.  * @param  {setting} 
  71.  * @return {Promise} 
  72.  */ 
  73. fetch(url, setting) { 
  74.     //设置参数的初始值 
  75.     let opts={ 
  76.         method: (setting.method || 'GET').toUpperCase(), //请求方式 
  77.         headers : setting.headers  || {}, // 请求头设置 
  78.         credentials : setting.credentials  || true, // 设置cookie是否一起发送 
  79.         body: setting.body || {}, 
  80.         mode : setting.mode  || 'no-cors', // 可以设置 cors, no-cors, same-origin 
  81.         redirect : setting.redirect  || 'follow', // follow, error, manual 
  82.         cache : setting.cache  || 'default' // 设置 cache 模式 (default, reload, no-cache) 
  83.     } 
  84.     let dataType = setting.dataType || "json", // 解析方式   
  85.         data = setting.data || "" // 参数 
  86.  
  87.     // 参数格式化 
  88.     function params_format (obj) { 
  89.         var str = '' 
  90.         for (var i in obj) { 
  91.             str += `${i}=${obj[i]}&` 
  92.         } 
  93.         return str.split('').slice(0, -1).join('') 
  94.     } 
  95.  
  96.     if (opts.method === 'GET') { 
  97.         url = url + (data?`?${params_format(data)}`:'') 
  98.     }else{ 
  99.         setting.body = data || {} 
  100.     } 
  101.  
  102.     return new Promise( (resolve, reject) => { 
  103.         fetch(url, opts).then( async res => { 
  104.             let data = dataType === 'text' ? await res.text() : 
  105.                 dataType === 'blob' ? await res.blob() : await res.json()  
  106.             resolve(data) 
  107.         }).catch( e => { 
  108.             reject(e) 
  109.         }) 
  110.     }) 
  111.  
  112. }  

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读