使用原生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 使用手册(二)
Sep 23 Javascript
JS实现点击按钮后框架内载入不同网页的方法
May 05 Javascript
JavaScript中函数表达式和函数声明及函数声明与函数表达式的不同
Nov 15 Javascript
基于jquery实现无限级树形菜单
Mar 22 Javascript
js添加绑定事件的方法
May 15 Javascript
js仿小米官网图片轮播特效
Sep 29 Javascript
如何快速上手Vuex
Feb 14 Javascript
JS中原始值和引用值的储存方式示例详解
Mar 23 Javascript
JS 数组和对象的深拷贝操作示例
Jun 06 Javascript
vscode 使用Prettier插件格式化配置使用代码详解
Aug 10 Javascript
Java无向树分析 实现最小高度树
Apr 09 Javascript
Vue router配置与使用分析讲解
Dec 24 Vue.js
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 !function_exists("T7FC56270E7A70FA81A5935B72EACBE29"))代码解密
2011/01/07 PHP
PHP array_multisort()函数的使用札记
2011/07/03 PHP
php中global和$GLOBALS[]的分析之一
2012/02/02 PHP
生成随机字符串和验证码的类的PHP实例
2013/12/24 PHP
Auntion-TableSort国人写的一个javascript表格排序的东西
2007/11/12 Javascript
js实现的日期操作类DateTime函数代码
2010/03/16 Javascript
js修改table中Td的值(定义td的单击事件)
2013/01/10 Javascript
对js关键字命名的疑问介绍
2014/04/25 Javascript
jquery实现叠层3D文字特效代码分享
2015/08/21 Javascript
给angular加上动画效遇到的问题总结
2016/02/17 Javascript
jQuery ajax应用总结
2016/06/02 Javascript
JavaScript从0开始构思表情插件
2016/07/26 Javascript
Jquery+Ajax+xml实现中国地区选择三级联动菜单效果(推荐)
2017/06/09 jQuery
js实现以最简单的方式将数组元素添加到对象中的方法
2017/12/20 Javascript
Angular实现点击按钮控制隐藏和显示功能示例
2017/12/29 Javascript
elementUI vue this.$confirm 和el-dialog 弹出框 移动 示例demo
2019/07/03 Javascript
微信小程序可滑动周日历组件使用详解
2019/10/21 Javascript
js函数柯里化的方法和作用实例分析
2020/04/11 Javascript
基于leaflet.js实现修改地图主题样式的流程分析
2020/05/15 Javascript
解决vue项目中出现Invalid Host header的问题
2020/11/17 Javascript
如何在vue 中使用柱状图 并自修改配置
2021/01/21 Vue.js
python多线程编程方式分析示例详解
2013/12/06 Python
Django1.7+python 2.78+pycharm配置mysql数据库教程
2014/11/18 Python
Python中文件的读取和写入操作
2018/04/27 Python
python更改已存在excel文件的方法
2018/05/03 Python
对python文件读写的缓冲行为详解
2019/02/13 Python
Flask框架模板继承实现方法分析
2019/07/31 Python
numpy.ndarray 实现对特定行或列取值
2019/12/05 Python
PyTorch中的C++扩展实现
2020/04/02 Python
python 监控logcat关键字功能
2020/09/04 Python
Django框架安装及项目创建过程解析
2020/09/14 Python
HTML 5 input placeholder 属性如何完美兼任ie
2014/05/12 HTML / CSS
用Java语言将一个键盘输入的数字转化成中文输出
2013/01/25 面试题
工伤赔偿协议书范本
2014/04/15 职场文书
2015年工商局个人工作总结
2015/07/23 职场文书
pandas进行数据输入和输出的方法详解
2022/03/23 Python