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 相关文章推荐
JavaScript 应用类库代码
Jun 02 Javascript
JQuery将文本转化成JSON对象需要注意的问题
May 09 Javascript
php显示当前文件所在的文件以及文件夹所有文件以树形展开
Dec 13 Javascript
jquery弹出层类代码分享
Dec 27 Javascript
在css加载完毕后自动判断页面是否加入css或js文件
Sep 10 Javascript
JS+CSS实现美化的下拉列表框效果
Aug 11 Javascript
JavaScript中Boolean对象的属性解析
Oct 21 Javascript
浅谈js中的in-for循环
Jun 28 Javascript
IONIC自定义subheader的最佳解决方案
Sep 22 Javascript
详解webpack+es6+angular1.x项目构建
May 02 Javascript
深入理解vue中slot与slot-scope的具体使用
Jan 26 Javascript
基于vue.js仿淘宝收货地址并设置默认地址的案例分析
Aug 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
简单实现限定phpmyadmin访问ip的方法
2013/03/05 PHP
php三种实现多线程类似的方法
2015/10/30 PHP
PHP后端银联支付及退款实例代码
2017/06/23 PHP
PHP结合Redis+MySQL实现冷热数据交换应用案例详解
2019/07/09 PHP
Laravel 自动生成验证的实例讲解:login / logout
2019/10/14 PHP
Laravel5.1 框架控制器基础用法实例分析
2020/01/04 PHP
JS 实现图片直接下载示例代码
2013/07/22 Javascript
instanceof和typeof运算符的区别详解
2014/01/06 Javascript
JS嵌套函数调用上下文的问题解决
2014/03/26 Javascript
JS在浏览器中解析Base64编码图像
2017/02/09 Javascript
Vue全家桶实践项目总结(推荐)
2017/11/04 Javascript
微信小程序使用toast消息对话框提示用户忘记输入用户名或密码功能【附源码下载】
2017/12/09 Javascript
webpack3.0升级4.0的方法步骤
2020/04/02 Javascript
vue中实现弹出层动画效果的示例代码
2020/09/25 Javascript
使用Python脚本来控制Windows Azure的简单教程
2015/04/16 Python
讲解Python中fileno()方法的使用
2015/05/24 Python
fastcgi文件读取漏洞之python扫描脚本
2017/04/23 Python
Python 装饰器使用详解
2017/07/29 Python
Python微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息示例
2017/08/21 Python
Python基于回溯法子集树模板解决野人与传教士问题示例
2017/09/11 Python
pytorch标签转onehot形式实例
2020/01/02 Python
Python变量及数据类型用法原理汇总
2020/08/06 Python
python 生成器需注意的小问题
2020/09/29 Python
应聘美工求职信
2013/11/07 职场文书
代理商会议邀请函
2014/01/27 职场文书
助理政工师申报材料
2014/06/03 职场文书
协会周年庆活动方案
2014/08/26 职场文书
2014镇党委书记党建工作汇报材料
2014/11/02 职场文书
艺术节开幕词
2015/01/28 职场文书
社区国庆节活动总结
2015/03/23 职场文书
信息技术研修心得体会
2016/01/08 职场文书
2016年优秀党务工作者先进事迹材料
2016/02/29 职场文书
2016年中学清明节活动总结
2016/04/01 职场文书
Golang标准库syscall详解(什么是系统调用)
2021/05/25 Golang
MySQL系列之五 视图、存储函数、存储过程、触发器
2021/07/02 MySQL
科普 | 业余无线电知识-波段篇
2022/02/18 无线电