<script type="text/javascript">
            function checkUsername(username){
              //发送ajax 请求 ,验证用户名是否可用
              //发送ajax 请求的代码包括4步 这四步骤是固定的
              //比传统请求要麻烦一些
              //AJAX发送请求全靠浏览器内置的这个对象    XMLHttpRequest对象
              // 使用这个XMLHttpRequest对象 可以再浏览器当中单独启动一个新的浏览器线程 ,通过浏览器线程发送该请求
              //达到异步效果
              //1.创建AJAX核心对象XMLHttpRequest《浏览器内置的,可以直接使用)
              var xhr;
              if(window.XMLHttpRequest){
                    xhr= new XMLHttpRequest();
              }else{
                    xhr = new ActiveXObject("Microsoft.XMLHTTP");
              }
              //2.//注册回调函数
              //程序执行到这里的时候,后面的回调函数并不会执行,只是将回调函数注册给xhr对象
              //等xhr对象的readyState发生改变的时候,后面的回调函数会执行
              //0 请求未初始化(在调用 open() 之前)
              //1 请求已提出(调用 send() 之前)
              //2 请求已发送(这里通常可以从响应得到内容头部)
              //3 请求处理中(响应中通常有部分数据可用,但是服务器还没有完成响应)
              //4 请求已完成(可以访问服务器响应并使用它)
              xhr.onreadystatechange = function () {
                  if (xhr.readyState == 4){//服务器响应结束
                    //可能会遇到404错误  500  需要判断
                    if (xhr.status == 200){//
                //获取到span标签
                        var nameTipMsg = document.getElementById("nameTipMsg");
                         //返回文本到span 
              nameTipMsg.innerText = xhr.responseText;
                      // var s = xhr.responseText;
                    }else{
                    }
                  }
              }
              //当按钮对象注册一个鼠标点击事件,当按钮上发生鼠标单击的时候,会执行回调函数
              //myBtn.onclick = function(){}
              //3.
                xhr.open("GET","checkusername.do?username=" + username,true);//只开启通道,不发送请求
              //4.发送AJAX请求
                xhr.send();
            }
        </script>
    用户名:<input type="text" name="username" onblur="checkUsername(this.value);"/>
        <span id="nameTipMsg" style="font-size: 12px;"></span><br>
    密码:<input type="password" name="password">
serlvet 3.0
@WebServlet(name = "CheckUsernameAction",urlPatterns = "/checkusername.do")
public class CheckUsernameAction extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.sendRedirect("text/html;charset=UTF-8");
        PrintWriter out = resp.getWriter();
        //获取用户名
        String username = req.getParameter("username");
        //连接数据库验证用户名是否存在
        if("admin".equals(username)){
            //用户名不可用
            out.print("<font color='red'>用户名被注册</font>");
        }else{
            out.print("<font color='green'>用户名可注册</font>");
        }
        //响应信息给浏览器
    }
}
