ajax笔记

Ajax 是 Asynchronous JavaScript and XML(以及 DHTML 等)的缩写,即“异步JavaScript和xml”。这个短语是Adaptive Path 的 Jesse James Garrett 发明的。其实ajax技术出现的比较早,但是并没有广泛应用,直到google将其应用google maps 和 Gmail中ajax才被迅速应用。


Ajax能让应用程序以异步的方式连接到服务器,等待服务器处理后获取返回值,从而实现无刷新页面就可以与后台通讯的方式。从一定意义上说,这种做法减少了处理过程的响应时间。


Ajax最核心的是XMLHttpRequest对象,它有以下几个重要的方法或属性:


open():建立到服务器的新请求。


send():向服务器发送请求。


abort():退出当前请求。


readyState:提供当前 HTML 的就绪状态。


responseText:服务器返回的请求响应文本。

其中XMLHttpRequest对象的open()方法有以下五个参数:

●request-type:发送请求的类型。典型的值是GET或POST,但也可以发送HEAD请求。


●url:要连接的 URL。


●asynch:如果希望使用异步连接则为true,否则为 false。该参数是可选的,默认为 true。


●username:如果需要身份验证,则可以在此指定用户名。该可选参数没有默认值。


●password:如果需要身份验证,则可以在此指定口令。该可选参数没有默认值。


通常使用其中的前三个参数。事实上,即使需要异步连接,也应该指定第三个参数为 “true”。这是默认值,但坚持明确指定请求是异步的还是同步的更容易理解。

好了,就介绍这么多了,下面做一个注册的小例子,感受一个这个“异步”到底是怎样的!


新建一个register.jsp页面,如下所示:


  1. <%@pagelanguage="java"contentType="text/html;charset=utf-8"
  2. pageEncoding="utf-8"%>
  3. <!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <metahttp-equiv="Content-Type"content="text/html;charset=utf-8">
  7. <title>注册</title>
  8. <scripttype="text/javascript">
  9. varrequest;
  10. varmessage=newObject();
  11. varaccount=newString();
  12. createRequest();
  13. functionaccountCheck(){
  14. account=document.getElementById("account").value;
  15. if(account==""){
  16. alert("请输入账户名!");
  17. return;
  18. }
  19. request.onreadystatechange=callBackData;
  20. request.open("post","AjaxDemo?account="+account,true);
  21. request.send(null);
  22. }
  23. functioncallBackData(){
  24. message=request.responseText;
  25. //alert(message);
  26. document.all("myDiv").innerHTML=message;
  27. }
  28. //根据不同浏览器创建XMLHttpRequest对象
  29. functioncreateRequest(){
  30. try{
  31. request=newXMLHttpRequest();
  32. }catch(trymicrosoft){
  33. try{
  34. request=newActiveXObject("Msxml2.XMLHTTP");
  35. }catch(othermicrosoft){
  36. try{
  37. request=newActiveXObject("Microsoft.XMLHTTP");
  38. }catch(failed){
  39. request=false;
  40. }
  41. }
  42. }
  43. if(!request)
  44. alert("XMLHttpRequest对象创建失败!");
  45. }
  46. </script>
  47. <styletype="text/css">
  48. table.demo{border-collapse:collapse;margin-top:50px;margin-left:220px;}
  49. table.demoth,td{padding:0;border:1pxsolid#000;}
  50. </style>
  51. </head>
  52. <body>
  53. <formaction=""method="post">
  54. <tableclass="demo"style="width:420px;height:200px;">
  55. <tr>
  56. <tdcolspan=3align=center>新用户注册</td>
  57. </tr>
  58. <tr>
  59. <tdstyle="width:90px;">用户帐号:</td>
  60. <tdstyle="width:170px;"><inputtype="text"id="account"name="account"onblur="accountCheck();"><fontcolor=red>*</font></td>
  61. <tdstyle="width:150px;"><divid="myDiv"></div></td>
  62. </tr>
  63. <tr>
  64. <td>用户密码:</td>
  65. <td><inputtype="password"id="password1"name="password1"></td>
  66. <td></td>
  67. </tr>
  68. <tr>
  69. <td>重复密码:</td>
  70. <td><inputtype="password"id="password2"name="password2"></td>
  71. <td></td>
  72. </tr>
  73. <tr>
  74. <tdcolspan=3align=center><inputtype="submit"value="注册"></td>
  75. </tr>
  76. </table>
  77. </form>
  78. </body>
  79. </html>


新建一个servlet类AjaxDemo.java,代码如下所示:


  1. packagecom.ldfsoft.servlet;
  2. importjava.io.IOException;
  3. importjava.io.PrintWriter;
  4. importjavax.servlet.ServletException;
  5. importjavax.servlet.http.HttpServlet;
  6. importjavax.servlet.http.HttpServletRequest;
  7. importjavax.servlet.http.HttpServletResponse;
  8. /**
  9. *ServletimplementationclassAjaxDemo
  10. */
  11. publicclassAjaxDemoextendsHttpServlet{
  12. privatestaticfinallongserialVersionUID=1L;
  13. /**
  14. *@seeHttpServlet#HttpServlet()
  15. */
  16. publicAjaxDemo(){
  17. super();
  18. //TODOAuto-generatedconstructorstub
  19. }
  20. /**
  21. *@seeHttpServlet#service(HttpServletRequestrequest,HttpServletResponseresponse)
  22. */
  23. protectedvoidservice(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
  24. //TODOAuto-generatedmethodstub
  25. request.setCharacterEncoding("utf-8");
  26. Stringaccount=request.getParameter("account");
  27. response.setContentType("text/html;charset=utf-8");
  28. //System.out.println("count:"+account);
  29. PrintWriterout=response.getWriter();
  30. if(account.equals("admin")){
  31. out.print("该用户已存在!");
  32. }else{
  33. out.print("该用户名可以使用!");
  34. }
  35. }
  36. }


这段代码的意思是如果输入的用户是admin,则提示“该用户已存在”,否则提示“该用户名可以使用”。


运行此页面,输入“admin”时则如下提示:


ajax笔记_第1张图片


输入其他的则提示你“该用户可以使用”:


ajax笔记_第2张图片


在这个过程你并没有感受到页面刷新,但是确确实实与服务器端交互了,没错,这就是Ajax的强大之处。今天就学习到这了。


注意:此文中创建的XMLHttpRequest对象在chrome浏览器和360浏览器中测试通过,但是在IE9上则会提示出现错误但是不影响结果,后续本人会解决这个问题。


这是本人学习的结果,允许转载,欢迎交流,但转载务必给出本文章的链接地址:http://blog.csdn.net/youqishini/article/details/7583658,谢谢~

你可能感兴趣的:(Ajax)