react中的ajax封装实例详解


Posted in Javascript onOctober 17, 2017

react中的ajax封装实例详解

代码块

**opts: {'可选参数'}
**method: 请求方式:GET/POST,默认值:'GET';
**url:  发送请求的地址, 默认值: 当前页地址;
**data: string,json;
**async: 是否异步:true/false,默认值:true;
**cache: 是否缓存:true/false,默认值:true;
**contentType: HTTP头信息,默认值:'application/x-www-form-urlencoded';
**success: 请求成功后的回调函数;
**error: 请求失败后的回调函数;
*/
let configResText = function (responseText, resTextType){
 return resTextType == 'html' ? responseText : JSON.parse(responseText);
};

let ajax = function (opts){
 //一.设置默认参数
 var defaults = {  
   method: 'GET',
     url: '',
    data: '',
    async: true,
    cache: false,
 contentType: 'application/x-www-form-urlencoded',
 resTextType: '',
   success: function (){},
    error: function (){}
 };

 //二.用户参数覆盖默认参数  
 for(var key in opts){
  defaults[key] = opts[key];
 }

 //三.对数据进行处理
 if(typeof defaults.data === 'object'){  //处理 data
  var str = '';
  for(var key in defaults.data){
   var curDataStr = JSON.stringify(defaults.data[key]);
   if (curDataStr.charAt(0) == '[' && curDataStr.charAt(curDataStr.length-1) == ']') {
    var arrQuery = JSON.parse(curDataStr).map(function (item){
     return key + '[]=' + item
    }).join('&');
    str += key + '=' + arrQuery + '&';
   } else {
    str += key + '=' + defaults.data[key] + '&';
   }
  }
  defaults.data = str.substring(0, str.length - 1);
 }

 defaults.method = defaults.method.toUpperCase();  //处理 method

 defaults.cache = defaults.cache ? '' : '&' + new Date().getTime() ;//处理 cache

 if( defaults.method === 'GET' && (defaults.data || defaults.cache) ) {
  defaults.url += String('?' + defaults.data + defaults.cache);  //处理 url
  if(defaults.cache){
   defaults.url = defaults.url.replace(/(\?[^\?]+)\?/gi, '$1');
  }
 }

 //四.开始编写ajax
 //1.创建ajax对象
 var oXhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
 //2.和服务器建立联系,告诉服务器你要取什么文件
 oXhr.open(defaults.method, defaults.url, defaults.async);
 //3.发送请求
 if(defaults.method === 'GET')
  oXhr.send(null);
 else{
  oXhr.setRequestHeader("Content-type", defaults.contentType);
  oXhr.send(defaults.data);
 }  
 //4.等待服务器回应
 oXhr.onreadystatechange = function (){
  if(oXhr.readyState === 4){
   if(oXhr.status === 200)
    defaults.success.call(oXhr, configResText(oXhr.responseText, defaults.resTextType));
   else{
    defaults.error();
   }
  }
 };
};

export default ajax;

调用方法

import ajax from '../../commonJS/ajax.js';
ajax({
  url: '',
  data: '',
  success: function(t) {
      if (t) {
      let allpageNum = t.data;
        $this.setState({
         allPages:allpageNum
        });
      }
  }
});

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
JQuery 小练习(实例代码)
Aug 07 Javascript
js Array操作的最简短最容易理解方法
Dec 09 Javascript
谷歌Chrome浏览器扩展程序开发小记
Jan 06 Javascript
JavaScript入门教程之引用类型
May 04 Javascript
bootstrap suggest搜索建议插件使用详解
Mar 25 Javascript
详解Vue.js组件可复用性的混合(mixin)方式和自定义指令
Sep 06 Javascript
React Native悬浮按钮组件的示例代码
Apr 05 Javascript
Bootstrap标签页(Tab)插件切换echarts不显示问题的解决
Jul 13 Javascript
vue和better-scroll实现列表左右联动效果详解
Apr 29 Javascript
webpack实践之DLLPlugin 和 DLLReferencePlugin的使用教程
Jun 10 Javascript
Jquery如何使用animation动画效果改变背景色的代码
Jul 20 jQuery
uniapp微信小程序:key失效的解决方法
Jan 20 Javascript
实现图片首尾平滑轮播(JS原生方法—节流)
Oct 17 #Javascript
打造通用的匀速运动框架(实例讲解)
Oct 17 #Javascript
封装运动框架实战左右与上下滑动的焦点轮播图(实例)
Oct 17 #Javascript
Vue中封装input组件的实例详解
Oct 17 #Javascript
js获取文件里面的所有文件名(实例)
Oct 17 #Javascript
Vue中之nextTick函数源码分析详解
Oct 17 #Javascript
vue mint-ui 实现省市区街道4级联动示例(仿淘宝京东收货地址4级联动)
Oct 16 #Javascript
You might like
解析二进制流接口应用实例 pack、unpack、ord 函数使用方法
2013/06/18 PHP
php用户注册信息验证正则表达式
2015/11/12 PHP
Joomla开启SEF的方法
2016/05/04 PHP
php模式设计之观察者模式应用实例分析
2019/09/25 PHP
laravel按天、按小时,查询数据的实例
2019/10/09 PHP
精通Javascript系列之数值计算
2011/06/07 Javascript
Jquery判断$("#id")获取的对象是否存在的方法
2013/09/25 Javascript
jquery 选取方法都有哪些
2014/05/18 Javascript
javascript实现可拖动变色并关闭层窗口实例
2015/05/15 Javascript
javascript实现鼠标放上后下边对应内容变换的效果
2015/08/06 Javascript
程序员必知35个jQuery 代码片段
2015/11/05 Javascript
JavaScript中的原型继承基础学习教程
2016/05/06 Javascript
js将json格式的对象拼接成复杂的url参数方法
2016/05/25 Javascript
RequireJS简易绘图程序开发
2016/10/28 Javascript
vue.js实现简单轮播图效果
2017/10/10 Javascript
VUE基于NUXT的SSR 服务端渲染
2018/11/30 Javascript
解决layer弹出层的内容页点击按钮跳转到新的页面问题
2019/09/14 Javascript
vue路由传参三种基本方式详解
2019/12/09 Javascript
利用Vue实现简易播放器的完整代码
2020/12/30 Vue.js
python 不关闭控制台的实现方法
2011/10/23 Python
浅析python 中__name__ = '__main__' 的作用
2014/07/05 Python
pandas对指定列进行填充的方法
2018/04/11 Python
python 缺失值处理的方法(Imputation)
2019/07/02 Python
python监控进程状态,记录重启时间及进程号的实例
2019/07/15 Python
Python Pillow(PIL)库的用法详解
2020/09/19 Python
css3的focus-within选择器的使用
2020/05/11 HTML / CSS
HTML5实现动画效果的方式汇总
2016/02/29 HTML / CSS
高清屏下canvas重置尺寸引发的问题的解决
2019/10/14 HTML / CSS
智乐游戏测试笔试题
2014/05/21 面试题
公共事业管理本科生求职信
2013/10/07 职场文书
自动化专业个人求职信范文
2013/12/30 职场文书
2014年乡镇妇联工作总结
2014/12/02 职场文书
二年级语文下册复习计划
2015/01/19 职场文书
保护环境建议书作文400字
2015/09/14 职场文书
仅用几行Python代码就能复制她的U盘文件?
2021/06/26 Python
Python采集爬取京东商品信息和评论并存入MySQL
2022/04/12 Python