12_基于ajax的程序开发

前端之家收集整理的这篇文章主要介绍了12_基于ajax的程序开发前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

12.1 ajax的历史由来

ajax(asynchronous javascript and xml),异步的javascript和xml


12.2 b/s结构的用户体验问题

示例12-1:模拟传统的用户注册流程

文件:register.html

  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <h1>Demo 邮件系统 - 用户注册</h1>
  5. <form name="regForm" id="regForm" action="doRegister.jsp" method="post">
  6. 注册用户名:<input type="text" name="userName" id="userName" /><br />
  7. 注册密码:<input type="password" name="password" id="password" /><br />
  8. 确认密码:<input type="password" name="password2" id="password2" /><br />
  9. <input type="submit" value="提交" />
  10. </form>
  11. </body>
  12. </html>

文件:doRegister.jsp
  1. <%@ page language="java" import="java.util.*" %>
  2. <%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
  3.  
  4. <%
  5. String userName = request.getParameter("userName");
  6.  
  7. if("scott".equals(userName)){
  8. out.println("用户名" + userName + "已经被占用了,请重新选择用户名!");
  9. }else{
  10. out.println("恭喜您," + userName + "注册成功了!");
  11. }
  12. %>

示例12-2:对传统的用户注册流程进行改进

文件:register.html

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <script type="text/javascript">
  5. function checkName(){
  6. var cun = document.getElementById("checkUserName");
  7. var un = document.getElementById("userName");
  8. cun.value = un.value;
  9. document.getElementById("checkForm").submit();
  10. }
  11. </script>
  12. </head>
  13. <body>
  14. <h1>Demo 邮件系统 - 用户注册</h1>
  15. <form name="regForm" id="regForm" action="D02_doRegister.jsp" method="post">
  16. 注册用户名:
  17. <input type="text" name="userName" id="userName" />
  18. <input type="button" value="检测用户名" onclick="checkName();"/>
  19. <br />
  20. 注册密码:<input type="password" name="password" id="password" /><br />
  21. 确认密码:<input type="password" name="password2" id="password2" /><br />
  22. <input type="submit" value="提交" />
  23. </form>
  24. <form id="checkForm" name="checkForm" action="D04_checkUserName.jsp" method="post" target="_blank">
  25. <input type="hidden" id="checkUserName" name="checkUserName" />
  26. </form>
  27. </body>
  28. </html>

文件:doRegister.jsp
  1. <%@ page language="java" import="java.util.*" %>
  2. <%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
  3.  
  4. <%
  5. String userName = request.getParameter("checkUserName");
  6.  
  7. if("scott".equals(userName)){
  8. out.println("用户名" + userName + "已经被占用了,请重新选择用户名!");
  9. }else{
  10. out.println("恭喜您," + userName + "注册成功了!");
  11. }
  12. %>


12.3 采用ajax技术提升用户体验

示例12-3:采用ajax技术完成用户注册

文件:register.html

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <script type="text/javascript">
  5. var req;
  6.  
  7. function checkUser(){
  8. var checkResult = document.getElementById("checkResult");
  9. checkResult.innerHTML = "正在检测用户名。。。";
  10. var userName = document.getElementById("userName").value;
  11. req = new ActiveXObject("Microsoft.XMLHttp");
  12. req.open("get","http://localhost:8080/08_ajax/D04_checkUserName.jsp?checkUserName=" + userName);
  13. req.onreadystatechange = handleRequest;
  14. req.send(null);
  15. }
  16.  
  17. function handleRequest(){
  18. var checkResult = document.getElementById("checkResult");
  19. if(req.readyState == 4){
  20. if(req.status == 200){
  21. checkResult.innerHTML = req.responseText;
  22. }else{
  23. alert("An error occurred:" + req.statusText);
  24. }
  25. }
  26. }
  27. </script>
  28. </head>
  29.  
  30. <body>
  31. <h1>Demo 邮件系统 - 用户注册</h1>
  32. <form name="regForm" id="regForm" action="doRegister.jsp" method="post">
  33. 注册用户名:
  34. <input type="text" name="userName" id="userName" onblur="checkUser();" />
  35. <label id="checkResult"></label>
  36. <br />
  37. 注册密码:<input type="password" name="password" id="password" /><br />
  38. 确认密码:<input type="password" name="password2" id="password2" /><br />
  39. <input type="submit" value="提交" />
  40. </form>
  41. </body>
  42. </html>


12.4 ajax原理解析

1.JavaScript

javascript is the soul of internet,推荐学习书籍《JavaScript权威指南》

2.DOM

DOM,也就是文档对象模型(Document Object Model),推荐书籍同上

3.XML和CSS

4.XMLHttpRequest对象

兼容浏览器的创建方法

  1. function createXHR(){
  2. var xhr;
  3. try{
  4. xhr = new ActiveXObject("Msxml2.XMLHTTP");
  5. }catch(e){
  6. try{
  7. xhr = new ActiveXObject("Microsoft.XMLHTTP");
  8. }catch(E){
  9. xhr = false;
  10. }
  11. }
  12. if(!xhr && typeof XMLHttpRequest != 'undefined'){
  13. xhr = new XMLHttpRequest();
  14. }
  15. return xhr;
  16. }


12.5 使用XMLHttpRequest对象与服务器端通信

12.5.1 使用open方法创建一个请求

12.5.2 使用send方法发送一个请求

12.5.3 使用onreadystatechange时间捕获请求状态变化

12.5.4 使用readyState属性判断请求状态变化

12.5.5 使用status属性判断请求的结果

12.5.6 使用responseText获得返回的文本

示例12-4:改进ajax技术

文件:register.html

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <script type="text/javascript">
  5. function createXHR(){
  6. var xhr;
  7. try{
  8. xhr = new ActiveXObject("Msxml2.XMLHTTP");
  9. }catch(e){
  10. try{
  11. xhr = new ActiveXObject("Microsoft.XMLHTTP");
  12. }catch(E){
  13. xhr = false;
  14. }
  15. }
  16. if(!xhr && typeof XMLHttpRequest != 'undefined'){
  17. xhr = new XMLHttpRequest();
  18. }
  19. return xhr;
  20. }
  21.  
  22. var req;
  23.  
  24. function checkUser(){
  25. var checkResult = document.getElementById("checkResult");
  26. checkResult.innerHTML = "正在检测用户名。。。";
  27. var userName = document.getElementById("userName").value;
  28. req = createXHR();
  29. req.open("get","http://localhost:8080/08_ajax/D04_checkUserName.jsp?checkUserName=" + userName);
  30. req.onreadystatechange = handleRequest;
  31. req.send(null);
  32. }
  33.  
  34. function handleRequest(){
  35. var checkResult = document.getElementById("checkResult");
  36. if(req.readyState == 4){
  37. if(req.status == 200){
  38. checkResult.innerHTML = req.responseText;
  39. }else{
  40. alert("An error occurred:" + req.statusText);
  41. }
  42. }
  43. }
  44. </script>
  45. </head>
  46.  
  47. <body>
  48. <h1>Demo 邮件系统 - 用户注册</h1>
  49. <form name="regForm" id="regForm" action="doRegister.jsp" method="post">
  50. 注册用户名:
  51. <input type="text" name="userName" id="userName" onblur="checkUser();" />
  52. <label id="checkResult"></label>
  53. <br />
  54. 注册密码:<input type="password" name="password" id="password" /><br />
  55. 确认密码:<input type="password" name="password2" id="password2" /><br />
  56. <input type="submit" value="提交" />
  57. </form>
  58. </body>
  59. </html>


12.6 JavaScript开源框架Prototype简介

12.6.1 prototype常用方法

示例12-5:prototype常用方法$()和$F()

文件:prototypeSimpleDemo.html

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>prototype</title>
  5. <script type="text/javascript" src="js/prototype.js"></script>
  6. <script type="text/javascript">
  7. function antiSelect(){
  8. var fm = $('f1');
  9. alert(fm.innerHTML);
  10. var cbs = $('c1','c2','c3');
  11. for(var i=0; i<cbs.length; i++){
  12. var flag = cbs[i].checked;
  13. if(flag)
  14. cbs[i].checked = false;
  15. else
  16. cbs[i].checked = true;
  17. }
  18. }
  19. function getTestValue(){
  20. alert($F('t1'));
  21. }
  22. </script>
  23. </head>
  24. <body>
  25. <form id="f1" name="f1" action="" method="post">
  26. first:<input type="checkBox" id="c1" value="c1" />
  27. second:<input type="checkBox" id="c2" value="c2" />
  28. thiird:<input type="checkBox" id="c3" value="c3" />
  29. <input type="button" value="反选" onclick="antiSelect();" />
  30. <hr />
  31. <input type="text" value="hello world" id="t1" />
  32. <input type="button" value="test" onclick="getTestValue();" />
  33. </form>
  34. </body>
  35. </html>
12.6.2 ajax对象

示例12-6:用prototype实现ajax

文件:prototypeAjax.html

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>用prototype实现Ajax</title>
  5. <Meta http-eqiuv="content-type" content="text/html; charset=utf-8">
  6.  
  7. <script type="text/javascript" src="js/prototype.js"></script>
  8. <script type="text/javascript">
  9. function checkUser(){
  10. var checkResult = $('checkResult');
  11. checkResult.innerHTML = "正在检测用户名。。。";
  12. var userName = $F('userName');
  13. var url = "http://localhost:8080/08_ajax/D04_checkUserName.jsp?checkUserName=" + userName;
  14. var pars = "";
  15. var req = new Ajax.Request(url,{
  16. method: 'get',parameters: pars,onComplete: handleRequest
  17. });
  18. }
  19. function handleRequest(info){
  20. $('checkResult').innerHTML = info.responseText;
  21. }
  22. </script>
  23. </head>
  24. <h1>Ajax的Prototype实现</h1>
  25. <form id="regForm" name="regForm" action="D02_doRegister.jsp" method="post">
  26. 注册用户名:
  27. <input type="text" id="userName" name="userName" onblur="checkUser();" />
  28. <label id="checkResult"></label><br />
  29. 注册密码:<input type="password" id="password" name="password" /><br />
  30. 确认密码:<input type="password" id="password2" name="password2" /><br />
  31. <input type="submit" value="提交" />
  32. </form>
  33. <body>
  34. </body>
  35. </html>

猜你在找的Ajax相关文章