ajax的全称是AsynchronousJavaScriptandXML,其中Asynchronous是异步的意思,区别于传统web开发使用的同步方式。据翻墙小编介绍,ajax已经存在很长时间了,只是当时并没有用到。后来谷歌用在了谷歌地图上。让人觉得用起来很方便,而且页面不用刷新,用户体验很好(当时的网站没有任何用户体验^_^)ajax原理XMLHttpRequest是核心机制ajax最早出现在IE5中,是一种支持异步请求的技术。简单的说就是javascript可以在不阻塞用户的情况下,及时向服务器发起请求并处理响应,达到页面不刷新的效果varxhr=newXMLHttpRequest()//IE浏览器使用varxhr=newActiveXObjectxhr.open('get',url,true)xhr.发送(空)xhr。onreadystatechange=function(){if(xhr.readyState==4){if(xhr.status==200){success(xhr.responseText)}else{fail&&fail(xhr.status)}}}xhr.open()第三个参数:true/fasle默认值为truefalse,就是等待返回数据再继续往下走。当取不到数据时,会一直卡在那里,直到取到数据。true表示不等待直接返回,这就是所谓的异步数据获取!xhr.send需要传输的数据,接受一个字符串类型xhr.onreadystatechange每次状态改变都会触发的事件处理器xhr.readyState有以下几种状态0请求没有初始化,open方法还没有被调用1服务器连接已经建立,open方法已经被调用,但是send方法还没有被调用。2、请求已接收,即接收到头信息。3.请求正在处理中,即已经收到响应体。这个时候因为response和httpheader不完整,这部分是通过responseBody和responseText获取的。数据会出现错误4请求已经完成,数据已经接收。这时候可以通过responseXml和responseText获取完整的响应数据。xhr.status普通HTTP状态0**:未初始化1**:收到请求,继续处理2**:成功接收、分析并接受操作3**:必须进一步处理请求才能完成4**:请求包含不正确的语法或无法完成5**:服务器无法执行完全有效的请求jQuery.ajax$。ajax({url:'',Type:'',data:'',async:true,dataType:'',beforeSend:function(xhr){xhr.setRequestHeader("Access-Toke");},success:function(data){fn1()},error:function(err){error&&error(err)}})fn2()success-function$.ajax在success方法中获取成功回调,jQuery判断如下状态,源码中有如下代码(大约8193行)isSuccess=status>=200&&status<300||status===304304---通常的说法是浏览器还有缓存,服务端告诉客户端原来的缓存文件还可以继续使用async-booleanasync默认设置值为true,这种情况是异步的,也就是说ajax发送请求后,在等待se在从rver端返回的过程中,前台会继续执行ajax块后面的脚本,直到server端返回正确的结果才会执行成功。也就是说,此时执行了两个线程,ajax块后面的线程发送了一个请求,当ajax块后面的脚本(另一个线程)将asyn设置为false时,此时ajax请求是同步的,也就是说此时ajax块发送请求后,会在fn1()处等待,不会去执行fn2(),知道执行fn1()部分dataType--stringdataType可以指定如下值xml:返回XML文档,使用JQuery处理html:返回纯文本HTML信息;包含的脚本标签将在插入DOM脚本时执行:返回纯文本JavaScript代码。结果不会自动缓存。除非设置了缓存参数。注意远程请求时(不在同一个域下),所有的post请求都会转换成get请求json:返回JSON数据jsonp:JSONP格式。当使用SONP形式调用函数时,比如myurl?callback=?,JQuery会自动替换掉最后一个“?”用正确的函数名执行回调函数text:returntheplaintextstringbeforeSend--该函数可以在发送请求之前修改XMLHttpRequest对象的功能,例如添加自定义HTTP标头。如果在beforeSend中返回false,则可以取消本次ajax请求。XMLHttpRequest对象是ajax的唯一参数优缺点优点:通过异步,提高用户体验,减少不必要的数据往返,实现局部刷新缺点:对搜索引擎的支持较弱参考文章:jQuery官方文档XMLHTTPRequest状态完整列表jQuery源码JavaScript进度事件
