AJAX 是一个比较莫名的缩写单词:Asynchronous JavaScript + XML
AJAX包含以下五个部分:
统一创建方法:
//创建XMLHttpRequest对象 function createXmlHttpRequest(){ if(window.XMLHttpRequest){//判断浏览器版本是不是IE7以上和其它浏览器 return new XMLHttpRequest(); }else if(window.ActiveXObject){//判断浏览器版本是不是IE5,IE6浏览器 return new ActiveXObject("Microsoft.XMLHTTP"); } }
工作原理
servlet
package servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); String uname=request.getParameter("uname"); boolean flag=false; if("accp".equalsIgnoreCase(uname)){ flag=true; out.println(flag); System.out.println(flag+" "+uname); }else{ out.println(flag); System.out.println(flag+" "+uname); } out.flush(); out.close(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>用户注册</title> <script type="text/javascript"> //判断用户名 function checkuname(ouser){ //取用户名的值 var uname=ouser.value; //判断是否为空 if(!uname){ alert("用户名不能为空!"); //ouser.focus(); return false; } /* get方式 //创建发送请求的url var url="LoginServlet?uname="+uname; //接收返回的XMLHttpRequest对象创建对象 xmlHttpRequest=createXmlHttpRequest(); //设置回调函数 xmlHttpRequest.onreadystatechange=haoLeJiaoWo; //初始化xmlHttpRequest xmlHttpRequest.open("GET",url,true); //发送请求,因为是get方式,所以参数为null xmlHttpRequest.send(null); */ //post方式 //请求的url var url="LoginServlet"; //创建xmlHttpRequest对象 xmlHttpRequest=createXmlHttpRequest(); //创建回调函数 xmlHttpRequest.onreadystatechange=haoLeJiaoWo; //初始化 xmlHttpRequest.open("POST",url,true); //设置请求头类型 xmlHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); xmlHttpRequest.send("uname="+uname); } //回调函数 function haoLeJiaoWo(){ //表示数据接收完成,并正确返回 if(xmlHttpRequest.readstate=4 && xmlHttpRequest.status==200){ //接收服务器返回的值这里为文本 var result=xmlHttpRequest.responseText; //去掉字符串前后的空格 result=result.replace(/(^\s*)|(\s*$)/g,""); //判断值 if(result=="true"){ alert("用户已经存在"); return false; }else{ alert("用户可以使用"); return true; } } } //创建XMLHttpRequest对象 function createXmlHttpRequest(){ if(window.XMLHttpRequest){//判断浏览器版本是不是IE7以上和其它浏览器 return new XMLHttpRequest(); }else if(window.ActiveXObject){//判断浏览器版本是不是IE5,IE6浏览器 return new ActiveXObject("Microsoft.XMLHTTP"); } } </script> </head> <body> <form action="LoginServlet" method="get"> <table align="center"> <tr> <td> <p>用户账户: <input type="text" name="uname" onblur="checkuname(this);"/> </p> </td> </tr> <tr> <td> <p>用户密码: <input type="password" name="passwd"/> </p> </td> </tr> <tr> <td> <p>确认密码: <input type="password" name="repasswd"/> </p> </td> </tr> <tr> <td> <input type="submit" value="提交"/> <input type="reset" value="重置"/> </td> </tr> </table> </form> </body> </html>
package servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class doGetU extends HttpServlet { private static final long serialVersionUID = 1L; public doGetU() { } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置响应为xml字符编码为UTF-8 String uname=request.getParameter("uname"); response.setContentType("text/xml;charset=utf-8"); PrintWriter out = response.getWriter(); StringBuilder bd=new StringBuilder(); bd.append("<userinfo>"); bd.append("<username>"); if(uname==null || uname.length()==0 ){ bd.append("请选择用户"); }else{ bd.append(uname); } bd.append("</username>"); bd.append("</userinfo>"); out.println(bd.toString()); out.flush(); out.close(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Ajax中xml处理</title> <script type="text/javascript"> function checkUser(ouser){ //获取下拉框的值 var uname=ouser.value; //提交的URL get方式 var url="doGetU?uname="+uname; //创建xmlHttpRequest对象 xmlHttpRequest=createXmlHttpRequest(); //设置回调函数 xmlHttpRequest.onreadystatechange=haoLeJiaoWo; //初始化 xmlHttpRequest.open("GET",url,true); //post方式 //xmlHttpRequest.open("post",url,true); //xmlHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //发送数据get方式,可以没有参数 xmlHttpRequest.send(); //post发送参数 //xmlHttpRequest.send("uname="+uname) } function haoLeJiaoWo(){ //接收完成,正确返回 if(xmlHttpRequest.readyState==4&&xmlHttpRequest.status==200){ var xml=xmlHttpRequest.responseXML; //判断是否为空 if(xml){ //获取useranem的子节点数组 var userNodes=xml.getElementsByTagName("username"); if(userNodes.length>0){ var uname=userNodes[0].firstChild.nodeValue; document.getElementById("username").value=uname; } } } } function createXmlHttpRequest(){ if(window.XMLHttpRequest){//判断浏览器版本IE7.0以上,或者其它的浏览器 return new XMLHttpRequest(); }else{//IE5.0,6.0 return new ActiveXObject("Microsoft.XMLHTTP"); } } </script> </head> <body> <form action="doGetU" method="get"> <table> <tr> <td>请选择用户:</td> <td style="width:150px"><select name="user" onchange="checkUser(this);"> <option value="accp">accp</option> <option value="test">test</option> </select></td> </tr> <tr> <td>用户名:</td> <td><input type="text" id="username" style="width: 150px" /> </td> </tr> </table> </form> </body> </html>
原文:http://www.cnblogs.com/liunanjava/p/4357333.html