1. /**
    * Created by liyinghao on 2016/8/23.
    */
    /*仿jQuery中的ajax方法,简单版实现;封装ajax的工具函数*/
    /*
    * 1 请求方式 type get post 默认是get方式
    * 2.接口地址 url 都是地址 默认的是当前地址
    * 3.是否异步 async true false 默认的true 异步请求
    * 4.请求数据 data {}对象形式 默认是空对象
    *
    *
    * 5.成功回调函数(成功需要做的事情) success
    * 6.失败回调函数(失败需要做的事情) error
    *
    * 比如 发送前要做的事情 beforeSend
    * */
    window.$ ={
    /* ajax:function(){
    }*/
    };
    /*定义一个ajax工具函数*/
    /*options 是一个对象*/
    $.ajax =function(options){
    /*如果你什么都没传呢?停止执行*/
    /*if(options && typeof options == 'object'){
    }*/
    if(!options ||typeof options !='object')return fasle;
    /*如果传了*/
    var type = options.type ||'get';
    var url = options.url || location.pathname;
    /* false true "" false */
    var async = options.async ===false?false:true;
    /*需要传递的数据*/
    var data = options.data ||{};
    /*需要data转化成ajax传递数据的格式 {name:'',age:''} ===>>> name=gc&age=10 */
    var dataStr ='';
    for(key in data){
    dataStr += key+'='+data[key]+'&';
    };
    /*str.slice(0,-1); 取到倒着数几个字符*/
    dataStr = dataStr && dataStr.slice(0,-1);
    /*ajax编程*/
    /*初始化*/
    var xhr =newXMLHttpRequest();
    /*设置请求行*/
    /*如果是get请求 参数是不是该拼接在url后面*/
    xhr.open(type,type=='get'?url+'?'+dataStr:url,async);
    /*设置请求头*/
    if(type =='post'){
    xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    }
    /*设置请求内容*/
    xhr.send(type=='get'?null:dataStr);
    /*响应*/
    xhr.onreadystatechange =function(){
    /*首先确定通讯完全完成*/
    if(xhr.readyState ==4){
    /*如果是成功的请求 status == 200 */
    if(xhr.status ==200){
    /*成功*/
    /*知道后台想要返回什么数据类型 application/json;charset=utf-8*/
    /*application/xml application/json text/html text/xml text/json text/css*/
    var contentType = xhr.getResponseHeader('Content-Type');
    var result =null;
    if(contentType.indexOf('xml')>-1){
    /*返回什么数据类型xml*/
    result = xhr.responseXML;
    }elseif(contentType.indexOf('json')>-1){
    /*返回什么数据类型json*/
    var data = xhr.responseText;
    result = data && JSON.parse(data);
    }else{
    result = xhr.responseText;
    }
    /*执行成功回调函数*/
    options.success && options.success(result);
    }else{
    /*失败*/
    options.error && options.error({status:xhr.status,statusText:xhr.statusText});
    }
    }
    }
    };
    /*get*/
    $.get=function(options){
    options.type ='get';
    $.ajax(options);
    }
    /*post*/
    $.post =function(options){
    options.type ='post';
    $.ajax(options);
    } 来自为知笔记(Wiz)

      

Ajax,ajax封装的更多相关文章

  1. 原生态AJAX详解和jquery对AJAX的封装

    AJAX: A :Asynchronous [eI`sinkrenes] 异步 J :JavaScript    JavaScript脚本语言 A: And X :XML 可扩展标记语言 AJAX现在 ...

  2. 【前端学习笔记04】JavaScript数据通信Ajax方法封装

    //Ajax 方法封装 //设置数据格式 function setData(data){ if(!data){ return ''; } else{ var arr = []; for(k in da ...

  3. 原生ajax与封装的ajax使用方法

    当我们不会写后端接口来测试ajax时,我们可以使用node环境创建一个本地服务器. 1.创建一个本地服务器可参考http://www.cnblogs.com/heyujun-/p/6793900.ht ...

  4. Ajax入门(二)Ajax函数封装

    如果看了的我上一篇博客<Ajax入门(一)从0开始到一次成功的GET请求>的话,肯定知道我们已经完成了一个简单的get请求函数了.如下: 1234567891011121314151617 ...

  5. js进阶ajax函数封装(匿名函数作为参数传递)(封装函数引入文件的方式非常好用)

    js进阶ajax函数封装(匿名函数作为参数传递)(封装函数引入文件的方式非常好用) 一.总结 2.匿名函数作为参数传递 二.js进阶ajax函数封装 ajax1.js function ajax(ur ...

  6. jQuery-实现简单的Ajax请求封装

    封装的意义在于复用,在于减少重复的代码. 我在项目中做了简单的Ajax请求封装,实现方式如下: //封装Ajax请求 $.extend({ ajaxDirect:function(url,type,d ...

  7. JQ中的Ajax的封装

    1.认识JQ中ajax的封装      jQ 对于ajax的封装有两层实现:$.ajax 为底层封装实现:基于 $.ajax ,分别实现了$.get 与$.post 的高层封装实现: 2.Ajax的底 ...

  8. Ajax的封装。

    封装 Ajax 因为Ajax 使用起来比较麻烦,主要就是参数问题,比如到底使用GET 还是POST:到 底是使用同步还是异步等等,我们需要封装一个Ajax 函数,来方便我们调用.    封装支持接收来 ...

  9. Jquery Ajax简单封装(集中错误、请求loading处理)

    Jquery Ajax简单封装(集中错误.请求loading处理) 对Jquery Ajax做了简单封装,错误处理,请求loading等,运用到项目中集中处理会很方便. 技术层面没有什么好说的,请求是 ...

  10. Ajax的封装,以及利用jquery的ajax获取天气预报

    1.Ajax的封装 function ajax(type,url,param,sync,datetype,callback){//第一个参数是获取数据的类型,第二个参数是传入open的url,第三个是 ...

随机推荐

  1. Nginx代理与反向代理、负载均衡实践

    通过 Nginx 提供的反向代理和负载均衡功能,可以合理的完成业务的分配,提高网站的处理能力;同时利用缓存功能,还可以将不需要实时更新的动态页面输出结果,转化为静态网页形成缓存,从而提高网站的响应速度 ...

  2. VUE不能对新增属性监测更新

    data () { return { data:{}, } }, method:{ if(data.code==0){ this.loading = false; this.data = data.d ...

  3. Engineer Assignment(暴力+状压dp)

    题意: n个工程,m个研究员,每个工程需要Ci个领域(X1,X2..Xci)的研究员 ,每个研究员会Di个不同的领域(X1,X2..Xdi),要完成一个工程必须使得分配给这个工程的研究员覆盖了这个工程 ...

  4. html5 新增元素以及css3新特性

    HTML5 1.HTML5 新元素 HTML5提供了新的元素来创建更好的页面结构: 标签 描述 <article> 定义页面独立的内容区域. <aside> 定义页面的侧边栏内 ...

  5. ubuntu中下载pycharm并添加到桌面

    方法一:下载Pycharm与安装 下载地址:https://www.jetbrains.com/pycharm/ Pycharm专业版和社区版对大多数人来说差别不大,区别如下: 我们下载Linux的社 ...

  6. java虚拟机规范(se8)——class文件格式(一)

    第四章 class文件格式 本章介绍了java虚拟机的class文件格式.每一个class文件包含一个单独的类或者接口的定义.虽然类和接口不一定都定义在文件中(比如类和接口亦可以通过类加载器直接生成) ...

  7. 如何使用 VLD 检测程序中的内存泄漏?

    下载地址:https://kinddragon.github.io/vld/ 下载 windows 安装包,进行安装即可,它会给你设置好 vs 的环境变量,使用时,直接在 vs ide 中包含即可. ...

  8. SpringBoot-技术专区-异步编程

    最近在实现一个聚合搜索的需求时,由于需要从五个索引中查询数据,然后再将搜索结果组合返回给前端app展现,显然这个地方不能再用同步的方式来操作了,如果有一个索引查询出现耗时较长,那么其余的请求都会排同步 ...

  9. 数组归一 reduce (数组归一) reduceRight(从右至左)

    var addTwoNumbers = function(l1, l2) { var e = l1 .reverse() .map((v, index, array) => v * Math.p ...

  10. C# 下载模板

    /// <summary> /// 模板下载 /// </summary> /// <returns></returns> public ActionR ...