使用原生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 相关文章推荐
javascript 判断中文字符长度的函数代码
Aug 27 Javascript
JS命名空间的另一种实现
Aug 09 Javascript
jQuery中$.fn的用法示例介绍
Nov 05 Javascript
Jquery焦点图实例代码
Nov 25 Javascript
javascript实现禁止复制网页内容
Dec 16 Javascript
angular中使用路由和$location切换视图
Jan 23 Javascript
完美实现仿QQ空间评论回复特效
May 06 Javascript
jQuery抛物线运动实现方法(附完整demo源码下载)
Jan 08 Javascript
轻松实现javascript图片轮播特效
Jan 13 Javascript
jQuery插件扩展extend的简单实现原理
Jun 24 Javascript
浅谈关于axios和session的一些事
Jul 13 Javascript
JS实现的全排列组合算法示例
Oct 09 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新手上路(六)
2006/10/09 PHP
PHP读取大文件的多种方法介绍
2016/04/04 PHP
php日期操作技巧小结
2016/06/25 PHP
详解PHP安装mysql.so扩展的方法
2016/12/31 PHP
PHP使用imagick扩展实现合并图像的方法
2017/04/25 PHP
Extjs入门之动态加载树代码
2010/04/09 Javascript
潜说js对象和数组
2011/05/25 Javascript
sencha touch 模仿tabpanel导航栏TabBar的实例代码
2013/10/24 Javascript
jQuery取得select选择的文本与值的示例
2013/12/09 Javascript
javascript中callee与caller的区别分析
2015/04/20 Javascript
js实现从左向右滑动式轮播图效果
2017/07/07 Javascript
anime.js 实现带有描边动画效果的复选框(推荐)
2017/12/24 Javascript
Vue工程模板文件 webpack打包配置方法
2017/12/26 Javascript
详解JavaScript中操作符和表达式
2018/09/12 Javascript
vue-router两种模式区别及使用注意事项详解
2019/08/01 Javascript
微信小程序防止多次点击跳转(函数节流)
2019/09/19 Javascript
vue基础知识--axios合并请求和slot
2020/06/04 Javascript
python中实现将多个print输出合成一个数组
2018/04/19 Python
Python实现的多进程和多线程功能示例
2018/05/29 Python
在python中pandas读文件,有中文字符的方法
2018/12/12 Python
Python利用字典破解WIFI密码的方法
2019/02/27 Python
python数据化运营的重要意义
2019/11/25 Python
python 追踪except信息方式
2020/04/25 Python
Python基于Hypothesis测试库生成测试数据
2020/04/29 Python
Python requests模块安装及使用教程图解
2020/06/30 Python
CSS3的Flexbox布局的简明入门指南
2016/04/08 HTML / CSS
详解如何在登录过期后跳出Ifram框架
2020/09/10 HTML / CSS
ETO男装官方网店:ETO Jeans
2019/02/28 全球购物
夏威夷咖啡公司:Hawaii Coffee Company
2019/09/19 全球购物
abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗?
2012/10/15 面试题
自荐信格式写作方法有哪些呢
2013/11/20 职场文书
学生会干部自荐信
2014/02/04 职场文书
夫妻分居协议书范本(有子女版)
2014/11/01 职场文书
2014年纠风工作总结
2014/12/08 职场文书
百万英镑观后感
2015/06/09 职场文书
2015年校医个人工作总结
2015/07/24 职场文书