使用原生js封装的ajax实例(兼容jsonp)


Posted in Javascript onOctober 12, 2017

实例如下:

/* 封装ajax函数
 * @param {string}opt.type http连接的方式,包括POST和GET两种方式
 * @param {string}opt.url 发送请求的url
 * @param {boolean}opt.async 是否为异步请求,true为异步的,false为同步的
 * @param {object}opt.data 发送的参数,格式为对象类型
 * @param {function}opt.success ajax发送并接收成功调用的回调函数
 */
  function ajax(opt) {
    opt = opt || {};
    opt.method = opt.method.toUpperCase() || 'POST';
    opt.url = opt.url || '';
    opt.async = opt.async || true;
    opt.data = opt.data || null;
    opt.success = opt.success || function () {};
    opt.dataType = opt.dataType || "json";
    var xmlHttp = null;
    if (XMLHttpRequest) {
      xmlHttp = new XMLHttpRequest();
    }
    else {
      xmlHttp = new ActiveXObject('Microsoft.XMLHTTP');
    }var params = [];
    for (var key in opt.data){
      params.push(key + '=' + opt.data[key]);
    }
    var postData = params.join('&');
    if (opt.method.toUpperCase() === 'POST') {
      xmlHttp.open(opt.method, opt.url, opt.async);
      xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=utf-8');
      xmlHttp.send(postData);
    }
    else if (opt.method.toUpperCase() === 'GET') {
      xmlHttp.open(opt.method, opt.url + '?' + postData, opt.async);
      xmlHttp.send(null);
    } 
    xmlHttp.onreadystatechange = function () {
      if(opt.dataType != 'jsonp'){
        if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
          opt.success(xmlHttp.responseText);
        }
      }else{
        //alert(1); 
        if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
          var oScript = document.createElement('script');
          document.body.appendChild(oScript);

          var callbackname = 'wangxiao'
          oScript.src = opt.url + "?" + postData+'&callback='+callbackname;

          window['wangxiao'] = function(data) {
            opt.success(data);
            document.body.removeChild(oScript);
          };
        }


      }

    };
  }
  export default ajax;

以上这篇使用原生js封装的ajax实例(兼容jsonp)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery.clean使用方法及思路分析
Jan 07 Javascript
html+js实现动态显示本地时间
Sep 21 Javascript
JQuery插件Quicksand实现超炫的动画洗牌效果
May 03 Javascript
详解JavaScript基于面向对象之创建对象(1)
Dec 10 Javascript
JavaScript基础语法之js表达式
Jun 07 Javascript
解析浏览器端的AJAX缓存机制
Jun 21 Javascript
JSON 数据详解及实例代码分析
Jan 20 Javascript
微信小程序 数据遍历的实现
Apr 05 Javascript
Bootstrap多级菜单的实现代码
May 23 Javascript
JS实现为动态添加的元素增加事件功能示例【基于事件委托】
Mar 21 Javascript
基于vue-cli npm run build之后vendor.js文件过大的解决方法
Sep 27 Javascript
微信小程序实现Swiper轮播图效果
Nov 22 Javascript
vue学习之mintui picker选择器实现省市二级联动示例
Oct 12 #Javascript
jQuery中 DOM节点操作方法大全
Oct 12 #jQuery
基于es6三点运算符的使用方法(实例讲解)
Oct 12 #Javascript
浅谈JavaScript的innerWidth与innerHeight
Oct 12 #Javascript
原生JS封装animate运动框架的实例
Oct 12 #Javascript
javascript中神奇的 Date对象小结
Oct 12 #Javascript
详解使用路由延迟加载 Angular 模块
Oct 12 #Javascript
You might like
默默小谈PHP&MYSQL分页原理及实现
2007/01/02 PHP
PHP+apc+ajax实现的ajax_upload上传进度条代码
2016/01/25 PHP
深入理解PHP JSON数组与对象
2016/07/19 PHP
py文件转exe时包含paramiko模块出错解决方法
2016/08/12 PHP
PHP实现支持加盐的图片加密解密
2016/09/09 PHP
laravel 模型查询按照whereIn排序的示例
2019/10/16 PHP
JavaScript 操作键盘的Enter事件(键盘任何事件),兼容多浏览器
2010/10/11 Javascript
JQuery弹出层示例可自定义
2014/05/19 Javascript
javascript实现动态导入js与css等静态资源文件的方法
2015/07/25 Javascript
JavaScript下的时间格式处理函数Date.prototype.format
2016/01/27 Javascript
JS简单判断函数是否存在的方法
2017/02/13 Javascript
JavaScript校验Number(4,1)格式的数字实例代码
2017/03/13 Javascript
vue货币过滤器的实现方法
2017/04/01 Javascript
jQuery获取随机颜色的实例代码
2018/05/21 jQuery
vue组件中watch props根据v-if动态判断并挂载DOM的问题
2019/05/12 Javascript
js中调用微信的扫描二维码功能的实现代码
2020/04/11 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛 DT VS HGT
2014/05/22 DOTA
[03:56]DOTA2完美大师赛趣味视频之小鸽子和Mineski打台球
2017/11/24 DOTA
从零学Python之入门(五)缩进和选择
2014/05/27 Python
python如何制作英文字典
2019/06/25 Python
Python 限定函数参数的类型及默认值方式
2019/12/24 Python
详解python算法常用技巧与内置库
2020/10/17 Python
突袭HTML5之Javascript API扩展2—地理信息服务及地理位置API学习
2013/01/31 HTML / CSS
详解webapp页面滚动卡顿的解决办法
2018/12/26 HTML / CSS
前后端结合实现amazeUI分页效果
2020/08/21 HTML / CSS
可打印的优惠券、杂货和优惠券代码:Coupons.com
2018/06/12 全球购物
REISS美国官网:伦敦最受欢迎的时尚品牌
2019/08/16 全球购物
质检员岗位职责
2013/12/17 职场文书
精彩的英文自荐信
2014/01/30 职场文书
开展党的群众路线教育实践活动方案
2014/02/05 职场文书
球队口号
2014/06/18 职场文书
复试通知单模板
2015/04/24 职场文书
2019邀请函格式及范文
2019/05/20 职场文书
解决MySQL Varchar 类型尾部空格的问题
2022/04/06 MySQL
mysql5.5中文乱码问题解决的有用方法
2022/05/30 MySQL
鸿蒙3.0体验感怎么样? 鸿蒙3.0系统评测向
2022/08/14 数码科技