




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Ajax实现原理Ajax的工作Ajax直觉认识:我们发送一个请求,但是这个请求比较特殊它是异步的,也就是说客户端是不会感觉到的。在发送这个请求的时候我们绑定了一个事件,这个事件会监控我们发送请求的状态,并且每次状态改变都会触发,所以我们就可以根据不同的状态让他执行不同的操作。请求到达服务器端的后服务器端根据相应的请求返回对应的信息,这个返回信息我们可以取得并且是异步得到,不会引起客户端刷新。既然在上面已经绑定了监控状态变化的事件,我们就可以在那里首先做好在得到返回信息要做的处理(当然如果失败也会有相应的状态我们也会做出相应的处理),我们在处理中得到返回信息通过javascript在客户端做相应
2、操作即可。Ajax核心一XMLHttpRequest上面我们大概感受了一下Ajax的过程,我们发现发送异步请求才是核心,事实上它就是XMLHttpRequest,整个Ajax之所以能完成异步请求完全是因为这个对应可以发送异步请求的缘故。而且我们又发现上面那个事件就是整个处理过程的核心,可以根据不同状态执行不同操作,其实它就是XMLHttpRequest的方法onreadystatechange,它在每次状态发生改变时都会触发。那么是谁取得的返回信息呢?它就是XMLHttpRequest的另一个方法responseText(当然还有responseXML)。(。)哦,我们还没有说发送给谁以及执行
3、发送操作,这两个就是XMLHttpRequest的open和send方法。Y(AoA)Y,其他的当然还有了,我们直接列出来吧:XMLHttpRequest对象属性readyState请求状态,开始请求时值为0直到请求完成这个值增长到4responseText目前为止接收到的响应体,readyState3此属性为空字符串,=3为当前响应体,=4则为完整响应体responseXML服务器端相应,解析为xml并作为Document对象返回status服务器端返回的状态码,=200成功,=404表示“NotFound”statusText用名称表示的服务器端返回状态,对于“O劭200,“NotFoun
4、d为400方法setRequestHeader()向一个打开但是未发生的请求设置头信息open()初始化请求参数但是不发送send()发送Http请求abort()取消当前相应getAllResponseHeaders()把http相应头作为未解析的字符串返回getResponseHeader()返回http相应头的值事件句柄onreadystatechange每次readyState改变时调用该事件句柄,但是当readyState=3有可能调用多次代码实现ajax.js文件代码,也是我们说的主要内容,是一个javascript文件,所有的Ajax操作都在这里:viewplaincopytoc
5、lipboardprint?1. /与服务器通信2. functiontalktoServer(url)3. varreq=newXMLHTTPRequst();4. varcallbackHandler=getReadyStateHandler(req);5. req.onreadystatechange=callbackHandler;6. req.open(POST,url,true);7. req.setRequestHeader(Content-Type,application/x-www-form-urlencoded);8. vartestmsg=document.getElem
6、entById(testmsg);9. varmsg_value=testmsg.value;10. req.send(msg=+msg_value);11. 12. /创建XMLHTTP对象13. functionnewXMLHTTPRequst()14. varxmlreq=false;15. if(window.XMLHttpRequest)16. xmlreq=newXMLHttpRequest();17. elseif(window.ActiveXobject)18. try19. xmlreq=newActiveXObject(Msxm12.XMLHTTP);21. try22.
7、xmlreq=newActiveXObject(Microsoft.XMLHTTP);23. catch(e2)24.25. 26. 27. 28. returnxmlreq;29. 30. /服务器回调函数31. functiongetReadyStateHandler(req)32. returnfunction()33. if(req.readyState=4)34. if(req.status=200)35. varmsg_display=document.getElementById(msg_display);36. msg_display.innerHTML=req.respons
8、eText;37. else38. varhellomsg=document.getElementById(hellomsg);39. hellomsg.innerHTML=ERROR+req.status;40. 41. 42. 43. /与服务器通信functiontalktoServer(url)varreq=newXMLHTTPRequst();varcallbackHandler=getReadyStateHandler(req);req.onreadystatechange=callbackHandler;req.open(POST,url,true);req.setRequest
9、Header(Content-Type,application/x-www-form-urlencoded);vartestmsg=document.getElementById(testmsg);varmsg_value=testmsg.value;req.send(msg=+msg_value);)/创建XMLHTTP对象functionnewXMLHTTPRequst()varxmlreq=false;if(window.XMLHttpRequest)xmlreq=newXMLHttpRequest();elseif(window.ActiveXobject)tryxmlreq=newA
10、ctiveXObject(Msxm12.XMLHTTP);catch(e1)tryxmlreq=newActiveXObject(Microsoft.XMLHTTP);catch(e2)returnxmlreq;服务器回调函数functiongetReadyStateHandler(req)returnfunction()if(req.readyState=4)if(req.status=200)varmsg_display=document.getElementById(msg_display);msg_display.innerHTML=req.responseText;elsevarhe
11、llomsg=document.getElementById(hellomsg);hellomsg.innerHTML=ERROR+req.status;其他相关的代码也贴出来吧,这样才能正确执行使用ajax.js代码的页面代码,也就是Default.aspx前台代码:viewplaincopytoclipboardprint?1.2.!DOCTYPEhtmlPUBLIC-/W3C/DTDXHTML1.0Transitional/ZEN/TR/xhtml1/DTD/xhtml1-transitional.dtd3.htmlxmlns=http:/www.w3.o
12、rg/1999/xhtml4.headrunat=server.5.在此提醒大家,他对应的异步请求页一定不能有form标签,否之就只有将显示16.17.信息的div放到此页的form外了,原因很简单:返回信息中有form,在此也显示的时候就造成了form嵌套,不允许!18.19.20.在此提醒大家,他对应的异步请求页一定不能有form标签,否之就只有将显示信息的div放到此页的form外了,原因很简单:返回信息中有form,在此也显示的时候就造成了form嵌套,不允许!Ajax.aspx的后台代码,也就是处理XMLHttpRequest请求的页
13、面后台代码(其对应的前台需要去掉form标签):viewplaincopytoclipboardprint?1. usingSystem;2. usingSystem.Collections.Generic;3. usingSystem.Linq;4. usingSystem.Web;5. usingSystem.Web.UI;6. usingSystem.Web.UI.WebControls;7. namespacemyFirst8. 9.publicpartialclassAjax:System.Web.UI.Page10. 11. protectedvoidPage_Load(objec
14、tsender,EventArgse)12. 13. stringstr=服务器ajax.aspx得到了您输入的信息+Requestmsg+您的ip地址是:;14. str+=Request.UserHostAddress;15. str+=当前服务器时间:;16. str+=DateTime.Now.ToLocalTime();17. Response.Write(str);18. 19. 20. usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Web;usingSystem.Web.UI;us
15、ingSystem.Web.UI.WebControls;namespacemyFirstpublicpartialclassAjax:System.Web.UI.PageprotectedvoidPage_Load(objectsender,EventArgse)stringstr=服务器ajax.aspx得到了您输入的信息+Requestmsg+您的ip地址是:;str+=Request.UserHostAddress;str+=当前服务器时间:;str+=DateTime.Now.ToLocalTime();Response.Write(str);从代码我们看出:首先我们创建一个XMLHttpRequest对象(由于浏览器不同需要相应判断处理),设置相应的请求信息(通过o
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论