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 相关文章推荐
ExtJS 工具栏 分页事件参数
Mar 05 Javascript
jQuery控制TR显示隐藏的三种常用方法
Aug 21 Javascript
jq实现左侧显示图片右侧文字滑动切换效果
Aug 04 Javascript
有关Promises异步问题详解
Nov 13 Javascript
js实现的彩色方块飞舞奇幻效果
Jan 27 Javascript
微信开发 微信授权详解
Oct 21 Javascript
微信小程序 欢迎页面的制作(源码下载)
Jan 09 Javascript
requireJS模块化实现返回顶部功能的方法详解
Oct 16 Javascript
js循环map 获取所有的key和value的实现代码(json)
May 09 Javascript
jQuery模拟12306城市选择框功能简单实现方法示例
Aug 13 jQuery
解决vue props 拿不到值的问题
Sep 11 Javascript
JavaScript中跨域问题的深入理解
Mar 04 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
什么是调频(FM)、调幅(AM)、短波(SW)、长波(LW)
2021/03/01 无线电
浅谈PHP正则中的捕获组与非捕获组
2016/07/18 PHP
详解PHP中array_rand函数的使用方法
2016/09/11 PHP
PHP实现生成模糊图片的方法示例
2017/12/21 PHP
js checkbox(复选框) 使用集锦
2009/04/28 Javascript
JavaScript加强之自定义event事件
2013/09/21 Javascript
js中判断用户输入的值是否为空的简单实例
2013/12/23 Javascript
轻松创建nodejs服务器(7):阻塞操作的实现
2014/12/18 NodeJs
12306验证码破解思路分享
2015/03/25 Javascript
基于jQuery实现的美观星级评论打分组件代码
2015/10/30 Javascript
js+css3制作时钟特效
2016/10/16 Javascript
jQuery解析json格式数据示例
2018/09/01 jQuery
关于NodeJS中的循环引用详解
2019/07/23 NodeJs
详解vue页面首次加载缓慢原因及解决方案
2019/11/06 Javascript
JavaScript常用工具函数汇总(浏览器环境)
2020/09/17 Javascript
在RedHat系Linux上部署Python的Celery框架的教程
2015/04/07 Python
Python的__builtin__模块中的一些要点知识
2015/05/02 Python
Ruby元编程基础学习笔记整理
2016/07/02 Python
Python的SQLalchemy模块连接与操作MySQL的基础示例
2016/07/11 Python
Python 12306抢火车票脚本 Python京东抢手机脚本
2018/02/06 Python
Vue的el-scrollbar实现自定义滚动
2018/05/29 Python
Python运维之获取系统CPU信息的实现方法
2018/06/11 Python
python3 字符串/列表/元组(str/list/tuple)相互转换方法及join()函数的使用
2019/04/03 Python
下载与当前Chrome对应的chromedriver.exe(用于python+selenium)
2020/01/14 Python
python如何求数组连续最大和的示例代码
2020/02/04 Python
python rsa-oaep加密的示例代码
2020/09/23 Python
从一次项目重构说起CSS3自定义变量在项目的使用方法
2021/03/01 HTML / CSS
简单的HTML5初步入门教程
2015/09/29 HTML / CSS
花园仓库建筑:Garden Buildings Direct
2018/02/16 全球购物
英国大码女性时装零售商:Evans
2018/08/29 全球购物
博朗(Braun)俄罗斯官方商店:德国小家电品牌
2019/09/24 全球购物
俄罗斯儿童和青少年服装、鞋子及配件的在线商店:Orby
2020/02/20 全球购物
个人批评与自我批评发言稿
2014/09/28 职场文书
2015年小学开学寄语
2015/02/27 职场文书
2016年小学六一儿童节活动总结
2016/04/06 职场文书
vue基于Teleport实现Modal组件
2021/05/31 Vue.js