使用原生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 的应用开发初探(mootools)
Dec 19 Javascript
jQuery 阴影插件代码分享
Jan 09 Javascript
jQuery+HTML5实现手机摇一摇换衣特效
Jun 05 Javascript
JavaScript动态添加style节点的方法
Jun 09 Javascript
JavaScript中的原始值和复杂值
Jan 07 Javascript
谈谈对JavaScript原生拖放的深入理解
Sep 20 Javascript
vue组件发布到npm简单步骤
Nov 30 Javascript
微信小程序自定义导航栏
Dec 31 Javascript
node(koa2) web应用模块介绍详解
Mar 29 Javascript
JS正则表达式封装与使用操作示例
May 15 Javascript
解决vue单页面应用中动态修改title问题
Jun 09 Javascript
JavaScript事件循环及宏任务微任务原理解析
Sep 02 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
hessian 在PHP中的使用介绍
2010/12/13 PHP
DOM XPATH获取img src值的query
2013/09/23 PHP
php使用fsockopen函数发送post,get请求获取网页内容的方法
2014/11/15 PHP
laravel中的错误与日志用法详解
2016/07/26 PHP
用PHP的socket实现客户端到服务端的通信实例详解
2017/02/04 PHP
yii2 开发api接口时优雅的处理全局异常的方法
2019/05/14 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
2019/12/20 PHP
将jQuery应用于login页面的问题及解决
2009/10/17 Javascript
javascript数组详解
2014/10/22 Javascript
javascript实现全角转半角的方法
2016/01/23 Javascript
jQuery实现摸拟alert提示框
2016/05/22 Javascript
AngularJS实现单独作用域内的数据操作
2016/09/05 Javascript
require.js与bootstrap结合实现简单的页面登录和页面跳转功能
2017/05/12 Javascript
如何理解Vue的render函数的具体用法
2017/08/30 Javascript
使用watch在微信小程序中实现全局状态共享
2019/06/03 Javascript
vue遍历对象中的数组取值示例
2019/11/07 Javascript
详解JS深拷贝与浅拷贝
2020/08/04 Javascript
jQuery实现可以扩展的日历
2020/12/01 jQuery
[01:18]PWL开团时刻DAY4——圣剑与抢盾
2020/11/03 DOTA
python实现sublime3的less编译插件示例
2014/04/27 Python
Python实现堆排序的方法详解
2016/05/03 Python
python的构建工具setup.py的方法使用示例
2017/10/23 Python
python使用Plotly绘图工具绘制水平条形图
2020/03/25 Python
python实发邮件实例详解
2019/11/11 Python
Django 解决model 反向引用中的related_name问题
2020/05/19 Python
pycharm 实现光标快速移动到括号外或行尾的操作
2021/02/05 Python
香港万宁官方海外旗舰店:香港健与美连锁店
2018/09/27 全球购物
美国乒乓球设备、配件和服装品牌:Killerspin
2020/06/07 全球购物
银行实习人员自我鉴定
2013/09/22 职场文书
环境工程专业个人求职信
2013/12/05 职场文书
小学数学教学反思
2014/02/02 职场文书
超市中秋节活动方案
2014/02/12 职场文书
《搭石》教学反思
2014/04/07 职场文书
实习报告评语
2014/04/26 职场文书
七一讲话心得体会
2014/09/05 职场文书
入党宣誓仪式主持词
2015/06/29 职场文书