使用原生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 相关文章推荐
js字符串的各种格式的转换 ToString,Format
Aug 08 Javascript
Node.js 的异步 IO 性能探讨
Oct 08 Javascript
js计算任意值之间随机数的方法
Jan 16 Javascript
jQuery插件HighCharts绘制2D圆环图效果示例【附demo源码下载】
Mar 09 Javascript
利用node.js实现反向代理的方法详解
Jul 24 Javascript
vue-lazyload图片延迟加载插件的实例讲解
Feb 09 Javascript
vue.js实现的经典计算器/科学计算器功能示例
Jul 11 Javascript
vue3.0 CLI - 2.1 -  component 组件入门教程
Sep 14 Javascript
Vue项目从webpack3.x升级webpack4不完全指南
Apr 28 Javascript
详解VSCode配置启动Vue项目
May 14 Javascript
基于layui的table插件进行复选框联动功能的实现方法
Sep 19 Javascript
Vue使用axios引起的后台session不同操作
Aug 14 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+DBM的同学录程序(5)
2006/10/09 PHP
php 不使用js实现页面跳转
2014/02/11 PHP
PHP中imagick函数的中文解释
2015/01/21 PHP
PHP5.5.15+Apache2.4.10+MySQL5.6.20配置方法分享
2016/05/06 PHP
PHP压缩图片功能的介绍
2019/03/21 PHP
dtree 网页树状菜单及传递对象集合到js内,动态生成节点
2012/04/14 Javascript
jquery队列queue与原生模仿其实现方法分享
2014/03/25 Javascript
JQuery实现的购物车功能(可以减少或者添加商品并自动计算价格)
2015/01/13 Javascript
js+css实现上下翻页相册代码分享
2015/08/18 Javascript
详解JavaScript正则表达式之RegExp对象
2015/12/13 Javascript
使用nodejs中httpProxy代理时候出现404异常的解决方法
2016/08/15 NodeJs
微信小程序 页面之间传参实例详解
2017/01/13 Javascript
树结构之JavaScript
2017/01/24 Javascript
ES6新特性七:数组的扩充详解
2017/04/21 Javascript
JS中Swiper的使用和轮播图效果
2017/08/11 Javascript
详解使用 Node.js 开发简单的脚手架工具
2018/06/08 Javascript
详解element-ui中el-select的默认选择项问题
2019/08/02 Javascript
three.js显示中文字体与tween应用详析
2021/01/04 Javascript
[59:44]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 paiN vs iG
2018/03/31 DOTA
深入学习Python中的装饰器使用
2016/06/20 Python
详解Python中的正斜杠与反斜杠
2019/08/09 Python
python读取hdfs上的parquet文件方式
2020/06/06 Python
Python的轻量级ORM框架peewee使用教程
2021/02/05 Python
html5声频audio和视频video等新特性详细说明
2012/12/26 HTML / CSS
荷兰皇家航空公司中国官网:KLM中国
2017/12/13 全球购物
KIKO MILANO西班牙官网:意大利领先的化妆品和护肤品品牌
2019/05/03 全球购物
美国户外烹饪产品购物网站:Outdoor Cooking
2020/01/10 全球购物
GWT都有什么特性
2016/12/02 面试题
社区学习十八大感想
2014/01/22 职场文书
优秀公益广告词大全
2014/03/19 职场文书
机关作风建设工作总结
2014/10/23 职场文书
营销与策划实训报告
2014/11/05 职场文书
论语读书笔记
2015/06/26 职场文书
2019年思想汇报
2019/06/20 职场文书
比较node.js和Deno
2021/04/27 Javascript
golang日志包logger的用法详解
2021/05/05 Golang