创建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

封装底层Ajax的更多相关文章

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

    你是否发现项目中有很多页面只用到了框架不到十分之一的内容,还引了压缩后还有70多kb的jquery库 你是否发现项目中就用了两三个underscore提供的方法,其他大部分的你方法你甚至从来没有看过 ...

  2. 使用JNI封装底层input系统提供的event事件

    首先说下思路,本文采用jni技术封装底层触摸事件,封装成MotionEvent类一样,不过没有android系统MotionEvent强大.源码MotionEvent位置:java-->fram ...

  3. 封装的ajax请求

    在做登录注册这类提交表单数据时,我们经常需要局部刷新网页来验证用户输入的信息,这就需要用到ajax请求,我们通常需要获取表单中的数据,发起ajax请求,通过服务程序,与数据库的数据进行比对,判断信息的 ...

  4. 自己封装个ajax

    你是否发现项目中有很多页面只用到了框架不到十分之一的内容,还引了压缩后还有70多kb的jquery库 你是否发现项目中就用了两三个underscore提供的方法,其他大部分的你方法你甚至从来没有看过 ...

  5. 封装一个Ajax工具函数

    /*封装一个ajax工具函数*/ window.$ = {}; /*通过$定义一个ajax函数*/ /* * 1. type   string   请求的方式  默认是get * 2. url     ...

  6. .net core 实践笔记(三)--封装底层

    前言: 有了前面的工作,简单的架子基本搭建起来了,因为条件有限,只能先测试SqlServer的了,源码放出来,也希望有兴趣的伙伴可以一起改善,相信可以成为未来进阶架构师的第一步,自己有小项目的时候可以 ...

  7. 原生封装的ajax

    原生封装的ajax的代码如下: //将数据转换成 a=1&b=2格式; function json2url(json){ var arr = []; //加随机数防止缓存; json.t = ...

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

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

  9. 自己封装的AJAX (带JSON)

    最简单的封装的AJAX: function myajax(url,onsuccess,fail){ //确定是否支持xhr var xhr = new XMLHttpRequest ? new XML ...

随机推荐

  1. 从零开始学JAVA(03)-用Eclipse生成HelloWorld的Jar文件(简单不带包)

    前面已经编写了helloWorld的程序,也可以在Eclipse IDE中正常运行,但如何脱离IDE运行呢? 先通过代码生成JAR文件,选择“File→Export...”,弹出Export对话框,选 ...

  2. 1.4.9 DocValues

    DocValues 在solr4.2以后,引入了一个令人兴奋的功能,这个功能在lucene存在已经一段时间了,但是还没有在solr中使用. 在某些方面,DocValue 是一种非常有效的索引方式. 为 ...

  3. solr4.x配置IK2012FF智能分词+同义词配置

    本文配置环境:solr4.6+ IK2012ff +tomcat7 在Solr4.0发布以后,官方取消了BaseTokenizerFactory接口,而直接使用Lucene Analyzer标准接口T ...

  4. edittext实现显示千分位格式

    在edittext中你在输入1123456789过程中自动显示为1,123,456,789这种千分位格式的.那么我们该怎么做呢? 查阅Android edittext api发现它有这样一个方法add ...

  5. [JavaEE] SSH框架笔记_S.S.H框架各自的优缺点

    Struts的原理和优点.Struts工作原理MVC即Model-View-Controller的缩写,是一种常用的设计模式.MVC 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化.M ...

  6. u163是什么故障 佳能MX328 u163是什么意思?墨水打完了,我加了墨水后还是显示U163(请检查墨水-彩色)警告灯亮

    U163:墨水已用完.请更换墨盒,然后关闭“扫描单元”(“机盖”).如果打印正在进行并希望继续打印,请在不取出墨盒的情况下按 [Stop] (停止) 按钮至少 5 秒. 然后可以在墨水用完的情况下继续 ...

  7. 读取Excel文件的两种方法

    第一种方法:传统方法,采用OleDB读取EXCEL文件, 优点:写法简单,缺点:服务器必须安有此组件才能用,不推荐使用 private DataSet GetConnect_DataSet2(stri ...

  8. iOS - UI - UIPageControl

    1.UIPageControl 分页控件 //分页控件初始化 UIPageControl * pageControl = [[UIPageControl alloc] init]; //分页页数 pa ...

  9. Linux Centos 7 使用yum安装 mysql5.7 (实验成功)

    第一部分:安装Mysql5.7 1.下载YUM库 shell > wget http://dev.mysql.com/get/mysql57-community-release-el7-7.no ...

  10. 算法java(Robert Sedgewick)基本API-StdOut.java

    /************************************************************************* * Compilation: javac StdO ...