使用原生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中使用replace结合正则实现replaceAll的效果
Jun 04 Javascript
jQuery筛选器children()案例详解(图文)
Feb 17 Javascript
Javascript 中创建自定义对象的方法汇总
Dec 04 Javascript
js计算德州扑克牌面值的方法
Mar 04 Javascript
深入理解JavaScript编程中的同步与异步机制
Jun 24 Javascript
zepto中使用swipe.js制作轮播图附swipeUp,swipeDown不起效果问题
Aug 27 Javascript
如何利用JSHint减少JavaScript的错误
Aug 23 Javascript
bootstrap——bootstrapTable实现隐藏列的示例
Jan 14 Javascript
vue仿element实现分页器效果
Sep 13 Javascript
Vue动态路由缓存不相互影响的解决办法
Feb 19 Javascript
JS实现时间校验的代码
May 25 Javascript
原生js实现下拉框选择组件
Jan 20 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获取文件行数的方法
2015/06/10 PHP
浅谈php处理后端&接口访问超时的解决方法
2016/10/29 PHP
PHP的new static和new self的区别与使用
2019/11/27 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
ppk谈JavaScript style属性
2008/10/10 Javascript
JavaScript 序列化对象实现代码
2009/12/18 Javascript
$.get获取一个文件的内容示例代码
2013/09/11 Javascript
关于jquery的多个选择器的使用示例
2013/10/18 Javascript
js设置cookie过期及清除浏览器对应名称的cookie
2013/10/24 Javascript
js 获取元素下面所有li的两种方法
2014/04/14 Javascript
比较常见的javascript中定义函数的区别
2015/11/09 Javascript
jQuery validate插件submitHandler提交导致死循环解决方法
2016/01/21 Javascript
jQuery 获取select选中值及清除选中状态
2016/12/13 Javascript
jQuery简单实现遍历单选框的方法
2017/03/06 Javascript
浅谈实现vue2.0响应式的基本思路
2018/02/13 Javascript
node.js部署之启动后台运行forever的方法
2018/05/23 Javascript
使用layui 渲染table数据表格的实例代码
2018/08/19 Javascript
代码整洁之道(重构)
2018/10/25 Javascript
详解Vue底部导航栏组件
2019/05/02 Javascript
详解VUE调用本地json的使用方法
2019/05/15 Javascript
解决layer弹出层的内容页点击按钮跳转到新的页面问题
2019/09/14 Javascript
js判断在哪个浏览器打开项目的方法
2020/01/21 Javascript
Python pickle类库介绍(对象序列化和反序列化)
2014/11/21 Python
基于wxpython实现的windows GUI程序实例
2015/05/30 Python
在PyCharm中三步完成PyPy解释器的配置的方法
2018/10/29 Python
Python3 导入上级目录中的模块实例
2019/02/16 Python
pycharm激活码有效到2020年11月底
2020/09/18 Python
详细分析Python垃圾回收机制
2020/07/01 Python
使用layui框架实现点击左侧导航切换右侧内容且右侧选项卡跟随变化的效果
2020/11/10 HTML / CSS
Monki官网:斯堪的纳维亚的独立时尚品牌
2020/11/09 全球购物
法国低价在线宠物商店:bitiba.fr
2020/07/03 全球购物
教代会开幕词
2015/01/28 职场文书
小学德育工作总结2015
2015/05/12 职场文书
学生检讨书范文
2019/06/24 职场文书
CSS 文字装饰 text-decoration & text-emphasis 详解
2021/04/06 HTML / CSS
Java基础-封装和继承
2021/07/02 Java/Android