使用原生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中的107个基础知识收集整理 推荐
Mar 29 Javascript
Js setInterval与setTimeout(定时执行与循环执行)的代码(可以传入参数)
Jun 11 Javascript
基于jquery的内容循环滚动小模块(仿新浪微博未登录首页滚动微博显示)
Mar 28 Javascript
jQuery DOM删除节点操作指南
Mar 03 Javascript
js绘制圆形和矩形的方法
Aug 05 Javascript
JS实现的自定义网页拖动类
Nov 06 Javascript
详解JavaScript中localStorage使用要点
Jan 13 Javascript
基于javascript实现listbox左右移动
Jan 29 Javascript
AngularJs基本特性解析(一)
Jul 21 Javascript
jQuery插件HighCharts实现的2D回归直线散点效果示例【附demo源码下载】
Mar 09 Javascript
vue.js实现只能输入数字的输入框
Oct 19 Javascript
vue开发中遇到的问题总结
Apr 07 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+dbfile开发小型留言本
2006/10/09 PHP
PHP编写的图片验证码类文件分享
2016/06/06 PHP
浅谈PHP错误类型及屏蔽方法
2017/05/27 PHP
php实现的表单验证类完整示例
2019/08/13 PHP
JavaScript读取中文cookie时的乱码问题的解决方法
2009/10/14 Javascript
JQueryEasyUI datagrid框架的基本使用
2013/04/08 Javascript
JQuery分别取得每行最后一列和最后一行的示例代码
2013/08/18 Javascript
复制网页内容,粘贴之后自动加上网址的实现方法(脚本之家特别整理)
2014/10/16 Javascript
实现前后端数据交互方法汇总
2015/04/07 Javascript
JS+CSS实现的简单折叠展开多级菜单效果
2015/09/12 Javascript
jQuery生成假加载动画效果
2016/12/01 Javascript
JavaScript 基础表单验证示例(纯Js实现)
2017/07/20 Javascript
node.js操作MongoDB的实例详解
2017/10/11 Javascript
js动态添加表格逐行添加、删除、遍历取值的实例代码
2018/01/25 Javascript
Js面试算法详解
2018/04/08 Javascript
JS非行间样式获取函数的实例代码
2018/06/05 Javascript
代码实例ajax实现点击加载更多数据图片
2018/10/12 Javascript
jQuery表单校验插件validator使用方法详解
2020/02/18 jQuery
JS 图片压缩原理与实现方法详解
2020/04/29 Javascript
在Python中Dataframe通过print输出多行时显示省略号的实例
2018/12/22 Python
十行代码使用Python写一个USB病毒
2019/06/21 Python
django drf框架自带的路由及最简化的视图
2019/09/10 Python
Python3基于print打印带颜色字符串
2020/07/06 Python
Python浮点型(float)运算结果不正确的解决方案
2020/09/22 Python
英国最大的线上保健品零售商之一:Vitamin Planet
2016/12/01 全球购物
师范生实习的个人自我鉴定
2013/10/20 职场文书
关于逃课的检讨书
2014/01/23 职场文书
回门宴父母答谢词
2014/01/26 职场文书
《骆驼和羊》教学反思
2014/02/27 职场文书
就业协议书范本
2014/10/08 职场文书
2014年体检中心工作总结
2014/12/23 职场文书
财务总监岗位职责
2015/02/03 职场文书
小学生手册家长意见
2015/06/03 职场文书
Vue项目中如何封装axios(统一管理http请求)
2021/05/02 Vue.js
详解MySQL数据库千万级数据查询和存储
2021/05/18 MySQL