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 相关文章推荐
让网页根据不同IE版本显示不同的内容
Feb 08 Javascript
JS获取并操作iframe中元素的方法
Mar 21 Javascript
jQuery处理xml格式的返回数据(实例解析)
Nov 28 Javascript
jQuery的$.proxy()应用示例介绍
Apr 03 Javascript
在HTML代码中使用JavaScript代码的例子
Oct 16 Javascript
jQuery中$.each()函数的用法引申实例
May 12 Javascript
jQuery树形控件zTree使用小结
Aug 02 Javascript
ASP.NET jquery ajax传递参数的实例
Nov 02 Javascript
最常见和最有用的字符串相关的方法详解
Feb 06 Javascript
详解关于react-redux中的connect用法介绍及原理解析
Sep 11 Javascript
浅谈Vue内置component组件的应用场景
Mar 27 Javascript
jquery实现手风琴案例
May 04 jQuery
实现图片首尾平滑轮播(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
通过ICQ网关发送手机短信的PHP源程序
2006/10/09 PHP
一篇有意思的技术文章php介绍篇
2010/10/26 PHP
Youku 视频绝对地址获取的方法详解
2013/06/26 PHP
php数组生成html下拉列表的方法
2015/07/20 PHP
zen cart实现订单中增加paypal中预留电话的方法
2016/07/12 PHP
javascript:void(0)的真正含义实例分析
2008/08/20 Javascript
input输入框的自动匹配(原生代码)
2013/03/19 Javascript
按下回车键指向下一个位置的一个函数代码
2014/03/10 Javascript
javascript 动态创建表格
2015/01/08 Javascript
jQuery实现网站添加高亮突出显示效果的方法
2015/06/26 Javascript
JS中call/apply、arguments、undefined/null方法详解
2016/02/15 Javascript
所见即所得的富文本编辑器bootstrap-wysiwyg使用方法详解
2016/05/27 Javascript
easyui导出excel无法弹出下载框的快速解决方法
2016/11/10 Javascript
从零开始学习Node.js系列教程之设置HTTP头的方法示例
2017/04/13 Javascript
vue toggle做一个点击切换class(实例讲解)
2018/03/13 Javascript
node实现基于token的身份验证
2018/04/09 Javascript
webpack之引入图片的实现及问题
2018/10/08 Javascript
Vue.directive 实现元素scroll逻辑复用
2019/11/29 Javascript
js实现点击按钮随机生成背景颜色
2020/09/05 Javascript
python with statement 进行文件操作指南
2014/08/22 Python
python使用PIL缩放网络图片并保存的方法
2015/04/24 Python
Python文件读取的3种方法及路径转义
2015/06/21 Python
黑科技 Python脚本帮你找出微信上删除你好友的人
2016/01/07 Python
python验证码识别的实例详解
2016/09/09 Python
用Python3创建httpServer的简单方法
2018/06/04 Python
Python爬虫包BeautifulSoup实例(三)
2018/06/17 Python
pycharm远程linux开发和调试代码的方法
2018/07/17 Python
Django模型序列化返回自然主键值示例代码
2019/06/12 Python
django2.2安装错误最全的解决方案(小结)
2019/09/24 Python
详解python中的闭包
2020/09/07 Python
英国最大的婴儿监视器网上商店:Baby Monitors Direct
2018/04/24 全球购物
授权委托书(公民个人适用)
2014/09/19 职场文书
2014幼儿园大班工作总结
2014/11/10 职场文书
海洋天堂观后感
2015/06/05 职场文书
详解Python生成器和基于生成器的协程
2021/06/03 Python
Java各种比较对象的方式的对比总结
2021/06/20 Java/Android