使用原生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.holdReady()使用方法
May 20 Javascript
JavaScript字符串对象slice方法入门实例(用于字符串截取)
Oct 16 Javascript
jQuery超简单选项卡完整实例
Sep 26 Javascript
浅析jQuery移动开发中内联按钮和分组按钮的编写
Dec 04 Javascript
AngularJS 简单应用实例
Jul 28 Javascript
AngularJS入门教程之Cookies读写操作示例
Nov 02 Javascript
C#微信小程序服务端获取用户解密信息实例代码
Mar 10 Javascript
JavaScript之RegExp_动力节点Java学院整理
Jun 29 Javascript
详解webpack + react + react-router 如何实现懒加载
Nov 20 Javascript
Vue自定义过滤器格式化数字三位加一逗号实现代码
Mar 23 Javascript
阿望教你用vue写扫雷小游戏
Jan 20 Javascript
详解JavaScript自定义函数
Jul 29 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 curl post 时出现的问题解决
2014/01/30 PHP
PHP读取汉字的点阵数据
2015/06/22 PHP
PHP vsprintf()函数格式化字符串操作原理解析
2020/07/14 PHP
JQuery的一些小应用收集
2010/03/27 Javascript
基于jquery的从一个页面跳转到另一个页面的指定位置的实现代码(带平滑移动的效果)
2011/05/24 Javascript
Javascript中的delete介绍
2012/09/02 Javascript
JS模板实现方法
2013/04/03 Javascript
输入自动提示搜索提示功能的javascript:sugggestion.js
2013/09/02 Javascript
js使用for循环与innerHTML获取选中tr下td值
2014/09/26 Javascript
avalonjs制作响应式瀑布流特效
2015/05/06 Javascript
JS闭包、作用域链、垃圾回收、内存泄露相关知识小结
2016/05/16 Javascript
关于javascript中限定时间内防止按钮重复点击的思路详解
2016/08/16 Javascript
JavaScript 继承详解(五)
2016/10/11 Javascript
jQuery双向列表选择器select版
2016/11/01 Javascript
解决Vue 浏览器后退无法触发beforeRouteLeave的问题
2017/12/24 Javascript
如何编写一个d.ts文件的步骤详解
2018/04/13 Javascript
基于JS开发微信网页录音功能的实例代码
2019/04/30 Javascript
vue input输入框关键字筛选检索列表数据展示
2020/10/26 Javascript
uni-app实现点赞评论功能
2019/11/25 Javascript
javascript读取本地文件和目录方法详解
2020/08/06 Javascript
[05:09]DOTA2-DPC中国联赛2月22日Recap集锦
2021/03/11 DOTA
python paramiko实现ssh远程访问的方法
2013/12/03 Python
python重要函数eval多种用法解析
2020/01/14 Python
Python日志logging模块功能与用法详解
2020/04/09 Python
Jupyter打开图形界面并画出正弦函数图像实例
2020/04/24 Python
使用HTML5的Canvas绘制曲线的简单方法
2015/09/08 HTML / CSS
Melijoe英国官网:法国儿童时尚网站
2016/11/18 全球购物
CK巴西官方网站:Calvin Klein巴西
2019/07/19 全球购物
面试自我介绍演讲稿
2014/04/29 职场文书
社区禁毒工作方案
2014/06/02 职场文书
2014年司法所工作总结
2014/11/22 职场文书
青年文明号申报材料
2014/12/23 职场文书
优秀教研组申报材料
2014/12/26 职场文书
车间班组长竞聘书
2015/09/15 职场文书
2016年“我们的节日·清明节”活动总结
2016/04/01 职场文书
Java 关于String字符串原理上的问题
2022/04/07 Java/Android