封装底层Ajax

创建Ajax简易步骤:
创建Ajax对象:var xhr=new XMLHttpRequest();
链接服务器:xhr.open(‘get‘,‘a.php‘,true);
发送请求或数据:xhr.send();
状态值改变时调用函数:xhr.onreadystatechange=fncallback;

封装Ajax:

function ajax(options){
        
        var url=options.url,
            asy=options.async!==false,
            type=(options.type || ‘GET‘).toUpperCase(),
            data=options.data || null;
            suc=options.success || null,
            err=options.error || null;
            
        xhr=window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP");
        //new XMLHttpRequest()  IE7+, Firefox, Chrome, Opera, Safari
        //new ActiveXObject(‘Microsoft.XMLHTTP‘)  ie5、6
        
        xhr.onreadystatechange=function(){
            if(xhr.readyState==4){
                xhr.status==200 ? suc && suc(xhr.responseText) : err && err();
            }
        }
        
        data=(function(data){
            if(data){
                var arr=[];
                for(var i in data){
                    arr.push(encodeURIComponent(i)+‘=‘+encodeURIComponent(data[i]));
                    //encodeURIComponent处理中文等特殊字符编码成%E5%93%88%E5%93%88形式
                }
                return arr.join(‘&‘);    //将数组变成字符串:username=name%E5%93%88%E5%93%88&password=123
            }else{
                return data;
            }
        })(data);
        
        if(type==‘GET‘ && data){
            url+= url.indexOf(‘?‘)!=-1 ? ‘&‘ : ‘?‘;
            url+=data+‘&t=‘+Math.random();
        }
        //用一个永远在变的数值Math.random()处理get方式留下的缓存,还可以用时间戳,new Date().getTime()
        //让url成: a.php?username=name%E5%93%88%E5%93%88&password=123&t=0.06531456997618079
        
        xhr.open(type,url,asy);
        
        switch(type){
            case ‘POST‘:
                xhr.setRequestHeader(‘content-type‘,‘application/x-www-form-urlencoded‘);
                data?xhr.send(data):xhr.send();
                break;
            default:
                xhr.send();
        }
    }

使用方法:

document.onclick=function(){

ajax({
            type:‘post‘,         //默认:get
            url:‘a.php‘,
            data:{
                username:‘name哈哈‘,
                password:123
            },                      //默认:null
            async:false,        //默认:ture
            success:function(sData){alert(sData)},        //默认为null
            error:function(){alert(‘出错啦‘)}                   //默认为null
        });
        
    }

附加:

xhr.readyState属性代码:
0    未初始化的状态。创建了一个XMLHttpRequest对象,尚未初始化
1    连接状态,已经调用了open方法,并且已经准备好发送请求
2    发送状态,已经调用了send方法发出请求,尚未得到响应结果
3    正在接收状态,已经接收了HTTP响应的头部信息,正在接收响应内容
4    已加载状态,此时响应内容已完全被接收

xhr.status常见几种状态:
200——交易成功(OK)
404——没有发现文件、查询或URl(没有找到指定的资源)(Not Found)
500——服务器产生内部错误(Internal Server Error)

xhr.statusText        //返回当前HTTP请求状态
xhr.abort();    //取消异步
xhr.getAllResponseHeaders();    //获取响应头信息-可通过控制台->网络XHR->Response Headers查看
xhr.setRequestHeader();        //设置请求头信息

1、get传送的数据量较小,不能大于2KB。post传送的数据量较大,理论上认为不受限制,实际因服务器或后台限制
2、get安全性低,post安全性较高。
3、从性能上讲post比get更消耗性能,原因是来自网络上的人这么说:“据Yahoo mail team 说: post方法在AJAX 请求下会被拆分成两个: sending header first, then sending data;逆向思维: post的请求如果没有data string,那么性能上应该和get是相同的。” 链接地址:http://cuishen.iteye.com/blog/2019925
~~~简而言之:GET方式传送数据量小,处理效率高,安全性低,会被缓存,而POST反之。

Ajax无注释版下载:

http://pan.baidu.com/s/1gdh9pyr

时间: 2024-10-25 14:33:29

封装底层Ajax的相关文章

jQuery封装的ajax操作

jQuery中ajax请求有三种操作方式$.get() $.post() $.ajax() get和post(是对$.ajax的封装) //不传递数据 $.get("./16.php",function(msg){ alert(msg); }); //给服务器传递数据 $.get("./16.php",{name:'tom',age:23},function(msg){ alert(msg); }); //用法与get方法类似 $.post("./16.p

自己封装的Ajax - JavaScript

1. [代码][JavaScript]代码      //javascript Object: ajax Object//Created By RexLeefunction Ajax(url,data){    this.url=url;    this.data=data;    this.browser=(function(){          if(navigator.userAgent.indexOf("MSIE")>0) {              return &

封装一个Ajax工具函数

/*封装一个ajax工具函数*/ window.$ = {}; /*通过$定义一个ajax函数*/ /* * 1. type   string   请求的方式  默认是get * 2. url    string   请求地址  接口地址 * 3. async  boolean  默认的是true * 4. data   object   {}请求数据 * * 5.success function  成功回调函数 * 6.error   function  失败的回调函数 * */ $.ajax

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

当我们不会写后端接口来测试ajax时,我们可以使用node环境来模拟一个后端接口. 1.模拟后端接口可参考http://www.cnblogs.com/heyujun-/p/6793900.html网站整站开发小例子,在打开命令窗口并转到所在项目文件夹下在命令行中输入npm install express --save,安装express中间件. 2.把当中的app.js的内容换成 var express=require('express'); //var path=require('path'

封装的ajax请求

在做登录注册这类提交表单数据时,我们经常需要局部刷新网页来验证用户输入的信息,这就需要用到ajax请求,我们通常需要获取表单中的数据,发起ajax请求,通过服务程序,与数据库的数据进行比对,判断信息的正确与否.这儿也将ajax请求进行了封装,当我们在项目中需要多次ajax请求时,就可以用封装的函数了,不用每次都写ajax请求,提高了代码的利用率和工作效率.当然封装得不一定很完美,网上也有很多优秀的封装好的ajax请求.也是通过闭包思想,具体的封装思路,在代码注释中也写得很详细了 这是封装的aja

自己封装的AJAX (带JSON)

最简单的封装的AJAX: function myajax(url,onsuccess,fail){ //确定是否支持xhr var xhr = new XMLHttpRequest ? new XMLHttpRequest : new ActiveXObject('Microsoft.XMLHTTP'); //准备发送post异步请求 xhr.open('POST', url, true); //监听并获得返回结果 xhr.onreadystatechange = function () { i

原生封装的ajax

原生封装的ajax的代码如下: //将数据转换成 a=1&b=2格式; function json2url(json){ var arr = []; //加随机数防止缓存; json.t = Math.random(); for(var name in json){ arr.push(name+'='+json[name]); } return arr.join('&'); } function ajax(json){ //1.创建一个ajax对象; if(window.XMLHttpRe

自己封装个ajax

你是否发现项目中有很多页面只用到了框架不到十分之一的内容,还引了压缩后还有70多kb的jquery库 你是否发现项目中就用了两三个underscore提供的方法,其他大部分的你方法你甚至从来没有看过 你是否发现fetch好像比ajax好用那么一点 你是否想过自己封装个ajax.... 纯前端写得久了,便想折腾点事情.比如先定一个小目标,年前自己写个类jquery轻量级库.... 那么就从自己封装一个ajax切入吧,首先我整理的一个思维导图,一目了然 解析参数数据 通常我们的请求后面会有一些参数,

先定一个小目标,自己封装个ajax

你是否发现项目中有很多页面只用到了框架不到十分之一的内容,还引了压缩后还有70多kb的jquery库 你是否发现项目中就用了两三个underscore提供的方法,其他大部分的你方法你甚至从来没有看过 你是否发现fetch好像比ajax好用那么一点 你是否想过自己封装个ajax.... 纯前端写得久了,便想折腾点事情.比如先定一个小目标,年前自己写个类jquery轻量级库.... 那么就从自己封装一个ajax切入吧,首先我整理的一个思维导图,一目了然 解析参数数据 通常我们的请求后面会有一些参数,