志在指尖
用双手敲打未来

ajax原理(ajax原理和实现步骤)

ajax原理

Ajax(AsynchronousJavaandXML的缩写)是一种异步恳求数据的web开发技能,关于改善用户的体验和页面功能很有帮助。简略地说,在不需要重新刷新页面的情况下,Ajax经过异步恳求加载后台数据,并在网页上呈现出来。常见运用场景有表单验证是否登入成功、百度搜索下拉框提示和快递单号查询等等。
Ajax意图:提高用户体验,较少网络数据的传输量
二、Ajax原理是什么
在解释Ajax原理之前,我们不妨先举个“领导想找小李报告一下作业”比如,领导想找小李问点事,就委托秘书去叫小李,自己就接着做其他作业,直到秘书告知他小李现已到了,最后小李跟领导报告作业。
Ajax恳求数据流程与“领导想找小李报告一下作业”相似。其中最中心的依赖是浏览器供给的对象,它扮演的人物相当于秘书,使得浏览器可以发出HTTP恳求与接纳HTTP呼应。浏览器接着做其他作业,等收到XHR返回来的数据再渲染页面。理解了Ajax的作业原理后,接下来我们讨论下怎么运用Ajax。
三、Ajax的运用
1.创建Ajax中心对象(记得考虑兼容性)
1.varxhr=null;
2.if(window.)
3.{//兼容IE7+,Firefox,Chrome,Opera,Safari
4.xhr=new();
5.}else{//兼容IE6,IE5
6.xhr=newActiveXObject(Microsoft.XMLHTTP);
7.}
2.向服务器发送恳求
1.xhr.open(method,url,async);
2.send(string);//post恳求时才运用字符串参数,否则不用带参数。
method:恳求的类型;GET或POST
url:文件在服务器上的方位
async:true(异步)或false(同步)
注意:post恳求一定要设置恳求头的格式内容
xhr.open(POST,test.html,true);
xhr.setRequestHeader(Content-type,application/x-www-form-urlencoded);
xhr.send(fname=Henrylname=Ford);//post恳求参数放在send里边,即恳求体
3.服务器呼应处理(区别同步跟异步两种情况)
responseText取得字符串形式的呼应数据。
responseXML取得XML形式的呼应数据。
①同步处理
1.xhr.open(GET,info.txt,false);
2.xhr.send();
3.document.getElementById(myDiv).innerHTML=xhr.responseText;//获取数据直接显示在页面上
②异步处理
相对来说比较复杂,要在恳求状态改动事情中处理。
1.xhr.onreadystatechange=function(){
2.if(xhr.readyState==4xhr.status==200){
3.document.getElementById(myDiv).innerHTML=xhr.responseText;
4.}
5.}
readyState
0-(未初始化)还没有调用send()方法
1-(载入)已调用send()方法,正在发送恳求
2-(载入完结)send()方法执行完结,现已接纳到全部呼应内容
3-(交互)正在解析呼应内容
4-(完结)呼应内容解析完结,可以在客户端调用了
status
③GET和POST恳求数据区别
恳求数据时的区别,详情见下面两张图:
总而言之:
·GET恳求的差数直接拼接在url上面
·POST恳求的参数就不是放在url了,而是放在send里边,即恳求体四、结束语
其实经过或者封装后的结构进行网络恳求,这种方法现已有点老旧了,配置和调用方法十分混乱,近几年刚刚出来的Fetch供给了一个更好的代替方法,它不仅供给了一种简略,合乎逻辑的方法来跨网络异步获取资源,并且可以很容易地被其他技能运用。ajax

ajax原理和实现步骤

一Ajax技术与原理
1.1Ajax简介
AJAX=AsynchronousJavaScriptandXML(异步的JavaScript和XML)。
AJAX不是新的编程言语,而是一种运用现有标准的新办法。
AJAX是与服务器交流数据并更新部分网页的艺术,在不从头加载整个页面的情况下。
1.2Ajax所包括的技术
咱们都知道ajax并非一种新的技术,而是几种原有技术的结合体。它由下列技术组合而成。
1.运用CSS和XHTML来表明。
2.运用DOM模型来交互和动态显现。
3.运用XMLHttpRequest来和服务器进行异步通信。
4.运用javascript来绑定和调用。
AJAX的核心是XMLHttpRequest目标。
不同的阅读器创立XMLHttpRequest目标的办法是有差异的。
IE阅读器运用ActiveXObject,而其他的阅读器运用名为XMLHttpRequest的JavaScript内建目标
1.3Ajax的工作原理
Ajax的工作原理相当于在用户和服务器之间加了—个中间层(AJAX引擎),运用户操作与服务器呼应异步化。并不是一切的用户恳求都提交给服务器。像—些数据验证和数据处理等都交给Ajax引擎自己来做,,只有确认需要从服务器读取新数据时再由Ajax引擎代为向服务器提交恳求。
来看看和传统办法的差异
再来看看它们各自的交互
阅读器的一般交互办法
阅读器的Ajax交互办法
在创立Web站点时,在客户端履行屏幕更新为用户供给了很大的灵活性。下面是运用Ajax能够完结的功用:
动态更新购物车的物品总数,无需用户单击Update并等候服务器从头发送整个页面。
提升站点的功用,这是经过削减从服务器下载的数据量而完结的。例如,在Amazon的购物车页面,当更新篮子中的一项物品的数量时,会从头载入整个页面,这有必要下载32K的数据。假如运用Ajax计算新的总量,服务器只会回来新的总量值,因而所需的带宽仅为原来的百分之一。
消除了每次用户输入时的页面改写。例如,在Ajax中,假如用户在分页列表上单击Next,则服务器数据只改写列表而不是整个页面。
直接修改表格数据,而不是要求用户导航到新的页面来修改数据。对于Ajax,当用户单击Edit时,能够将静态表格改写为内容可修改的表格。用户单击Done之后,就能够宣布一个Ajax恳求来更新服务器,并改写表格,使其包括静态、只读的数据。
1.4XMLHttpRequest目标的三个常用的特点
1.onreadystatechange特点
onreadystatechange特点存有处理服务器呼应的函数。
下面的代码界说一个空的函数,可一起对onreadystatechange特点进行设置:
xmlHttp.onreadystatechange=function(){
//咱们需要在这写一些代码
}
2.readyState特点
readyState特点存有服务器呼应的状况信息。每逢readyState改变时,onreadystatechange函数就会被履行。
readyState特点可能的值:
状况描绘
0恳求未初始化(在调用open()之前)
1恳求已提出(调用send()之前)
2恳求已发送(这儿一般能够从呼应得到内容头部)
3恳求处理中(呼应中一般有部分数据可用,可是服务器还没有完结呼应)
4恳求已完结(能够拜访服务器呼应并运用它)
咱们要向这个onreadystatechange函数增加一条If句子,来测验咱们的呼应是否已完结(意味着可取得数据):
xmlHttp.onreadystatechange=function(){
if(xmlHttp.readyState==4){
//从服务器的response取得数据
}
}
3.responseText特点
能够经过responseText特点来取回由服务器回来的数据。
在咱们的代码中,咱们将把时间文本框的值设置为等于responseText:
xmlHttp.onreadystatechange=function(){
if(xmlHttp.readyState==4){
document.myForm.time.value=xmlHttp.responseText;
}
}
其它特点如下:
1.5xmlhttprequst的办法
1.open()办法
open()有三个参数。第一个参数界说发送恳求所运用的办法,第二个参数规定服务器端脚本的URL,第三个参数规定应当对恳求进行异步地处理。
xmlHttp.open(“GET”,”test.php”,true);
2.send()办法
send()办法将恳求送往服务器。假如咱们假设HTML文件和PHP文件位于相同的目录,那么代码是这样的:
xmlHttp.send(null);
其它办法如下:
二Ajax编程过程
为了便利了解,我给AJAX一致了一个流程,要想完结AJAX,就要按照今后过程走:
创立XMLHttpRequest目标。
设置恳求办法。
调用回调函数。
发送恳求。
下面来看下具体过程:
2.1创立XMLHttpRequest目标
创立XMLHttp目标的语法是:
varxmlHttp=newXMLHttpRequest();
假如是IE5或许IE6阅读器,则运用ActiveX目标,创立办法是:
varxmlHttp=newActiveXObject(“Microsoft.XMLHTTP”);
一般咱们手写AJAX的时分,首先要判别该阅读器是否支持XMLHttpRequest目标,假如支持则创立该目标,假如不支持则创立ActiveX目标。JS代码如下:
//第一步:创立XMLHttpRequest目标
varxmlHttp;
if(window.XMLHttpRequest){//非IE
xmlHttp=newXMLHttpRequest();
}elseif(window.ActiveXObject){//IE
xmlHttp=newActiveXObject(“Microsoft.XMLHTTP”)
}
2.2设置恳求办法
在WEB开发中,恳求有两种方法,一个是get,一个是post,所以在这儿需要设置一下具体运用哪个恳求,XMLHttpRequest目标的open()办法便是来设置恳求办法的。
open()办法
功用参数
规定恳求的类型、URL以及是否异步处理恳求参数1:设置恳求类型(GET或POST),GET与POST的差异请自己百度一下,这儿不做解说;
参数2:文件在服务器上的位置;
参数3:是否异步处理恳求,是为true,否为false。
如下:
//第二步:设置和服务器端交互的相应参数,向路径http://localhost:8080/JsLearning3/getAjax预备发送数据
varurl=”http://localhost:8080/JsLearning3/getAjax”;
xmlHttp.open(“POST”,url,true);
open办法如下:
GET还是POST?
与POST相比,GET更简略也更快,并且在大部分情况下都能用。然而,在以下情况中,请运用POST恳求:
无法运用缓存文件(更新服务器上的文件或数据库)
向服务器发送很多数据(POST没有数据量约束)
发送包括不知道字符的用户输入时,POST比GET更安稳也更牢靠
异步-True或False?
AJAX指的是异步JavaScript和XML(AsynchronousJavaScriptandXML)。XMLHttpRequest目标假如要用于AJAX的话,其open()办法的async参数有必要设置为true:对于web开发人员来说,发送异步恳求是一个巨大的进步。很多在服务器履行的使命都相当费时。AJAX呈现之前,这可能会引起应用程序挂起或中止。
经过AJAX,JavaScript无需等候服务器的呼应,而是:
在等候服务器呼应时履行其他脚本
当呼应安排妥当后对呼应进行处理
2.3调用回调函数
假如在上一步中open办法的第三个参数挑选的是true,那么当时便是异步恳求,这个时分需要写一个回调函数,XMLHttpRequest目标有一个onreadystatechange特点,这个特点回来的是一个匿名的办法,所以回调函数就在这儿写xmlHttp.onreadystatechange=function{},function{}内部便是回调函数的内容。所谓回调函数,便是恳求在后台处理完,再回来到前台所完结的功用。在这个比如里,咱们的回调函数要完结的功用便是接纳后台处理后反馈给前台的数据,然后将这个数据显现到指定的div上。由于从后台回来的数据可能是过错的,所以在回调函数中首先要判别后台回来的信息是否正确,假如正确才能够持续履行。代码如下:
//第三步:注册回调函数
xmlHttp.onreadystatechange=function(){
if(xmlHttp.readyState==4){
if(xmlHttp.status==200){
varobj=document.getElementById(id);
obj.innerHTML=xmlHttp.responseText;
}else{
alert(“AJAX服务器回来过错!”);
}
}
}
在上面代码中,xmlHttp.readyState是存有XMLHttpRequest的状况。从0到4产生变化。0:恳求未初始化。1:服务器连接已树立。2:恳求已接纳。3:恳求处理中。4:恳求已完结,且呼应已安排妥当。所以这儿咱们判别只有当xmlHttp.readyState为4的时分才能够持续履行。
xmlHttp.status是服务器回来的成果,其间200代表正确。404代表未找到页面,所以这儿咱们判别只有当xmlHttp.status等于200的时分才能够持续履行。
varobj=document.getElementById(id);
obj.innerHTML=xmlHttp.responseText;
这段代码便是回调函数的核心内容,便是获取后台回来的数据,然后将这个数据赋值给id为testid的div。xmlHttp目标有两个特点都能够获取后台回来的数据,别离是:responseText和responseXML,其间responseText是用来取得字符串方法的呼应数据,responseXML是用来取得XML方法的呼应数据。至于挑选哪一个是取决于后台给回来的数据的,这个比如里咱们只是显现一条字符串数据所以挑选的是responseText。responseXML将会在今后的比如中介绍。
AJAX状况值与状况码差异
AJAX状况值是指,运转AJAX所经历过的几种状况,不管拜访是否成功都将呼应的过程,能够了解成为AJAX运转过程。如:正在发送,正在呼应等,由AJAX目标与服务器交互时所得;运用“ajax.readyState”取得。(由数字1~4单位数字组成)
AJAX状况码是指,不管AJAX拜访是否成功,由HTTP协议根据所提交的信息,服务器所回来的HTTP头信息代码,该信息运用“ajax.status”所取得;(由数字1XX,2XX三位数字组成,具体检查RFC)
这便是咱们在运用AJAX时为什么选用下面的办法判别所取得的信息是否正确的原因。
if(ajax.readyState==4&&ajax.status==200){。。。。);}
AJAX运转过程与状况值阐明
在AJAX实践运转傍边,对于拜访XMLHttpRequest(XHR)时并不是一次完结的,而是别离经历了多种状况后取得的成果,对于这种状况在AJAX中共有5种,别离是:
0-(未初始化)还没有调用send()办法
1-(载入)已调用send()办法,正在发送恳求
2-(载入完结)send()办法履行完结,
3-(交互)正在解析呼应内容
4-(完结)呼应内容解析完结,能够在客户端调用了
对于上面的状况,其间“0”状况是在界说后自动具有的状况值,而对于成功拜访的状况(得到信息)咱们大多数选用“4”进行判别。
AJAX状况码阐明
1**:恳求收到,持续处理
2**:操作成功收到,分析、承受
3**:完结此恳求有必要进一步处理
4**:恳求包括一个过错语法或不能完结
5**:服务器履行一个彻底有效恳求失败
再具体就如下:
100——客户有必要持续宣布恳求
101——客户要求服务器根据恳求转换HTTP协议版别
200——买卖成功
201——提示知道新文件的URL
202——承受和处理、但处理未完结
203——回来信息不确认或不完整
204——恳求收到,但回来信息为空
205——服务器完结了恳求,用户代理有必要复位当时现已阅读过的文件
206——服务器现已完结了部分用户的GET恳求
300——恳求的资源可在多处得到
301——删除恳求数据
302——在其他地址发现了恳求数据
303——建议客户拜访其他URL或拜访办法
304——客户端现已履行了GET,但文件未变化
305——恳求的资源有必要从服务器指定的地址得到
306——前一版别HTTP中运用的代码,现行版别中不再运用
307——申明恳求的资源临时性删除
400——过错恳求,如语法过错
401——恳求授权失败
402——保存有效ChargeTo头呼应
403——恳求不允许
404——没有发现文件、查询或URl
405——用户在Request-Line字段界说的办法不允许
406——根据用户发送的Accept拖,恳求资源不行拜访
407——类似401,用户有必要首先在代理服务器上得到授权
408——客户端没有在用户指定的饿时间内完结恳求
409——对当时资源状况,恳求不能完结
410——服务器上不再有此资源且无进一步的参阅地址
411——服务器拒绝用户界说的Content-Length特点恳求
412——一个或多个恳求头字段在当时恳求中过错
413——恳求的资源大于服务器允许的大小
414——恳求的资源URL善于服务器允许的长度
415——恳求资源不支持恳求项目格式
416——恳求中包括Range恳求头字段,在当时恳求资源范围内没有range指示值,恳求也不包括If-Range恳求头字段
417——服务器不满足恳求Expect头字段指定的期望值,假如是代理服务器,可能是下一级服务器不能满足恳求
500——服务器产生内部过错
501——服务器不支持恳求的函数
502——服务器暂时不行用,有时是为了避免产生系统过载
503——服务器过载或暂停修理
504——关口过载,服务器运用另一个关口或服务来呼应用户,等候时间设定值较长
505——服务器不支持或拒绝支恳求头中指定的HTTP版别
2.4发送恳求
//第四步:设置发送恳求的内容和发送报送。然后发送恳求
varparams=”userName=”+document.getElementsByName(“userName”)[0].value+”&userPass=”+document.getElementsByName(“userPass”)[0].value+”&time=”+Math.random();//增加time随机参数,避免读取缓存
xmlHttp.setRequestHeader(“Content-type”,”application/x-www-form-urlencoded;charset=UTF-8″);//向恳求增加HTTP头,POST假如有数据一定加加!!!!
xmlHttp.send(params);
假如需要像HTML表单那样POST数据,请运用setRequestHeader()来增加HTTP头。然后在send()办法中规定您期望发送的数据。

未经允许不得转载:IT技术网站 » ajax原理(ajax原理和实现步骤)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载