html:
<input type="text" name="account" value="" size="20" onblur="doCheckAccount()"/><span id="accountMessage"></span>
------------------------------------------------------------------------------------------------
javascript:
            function doCheckAccount(){
                var name=document.getElementById("account").value;
                if (!isRegisterUserName(name)){
                    document.getElementById("accountMessage").innerHTML="用户名不合法!";
                }
                else{
                    document.getElementById("accountMessage").innerHTML="正在处理...";
                    send_request('../Login?method=2&username='+name,backInfo);
                }
            }
------------------------------------------------------------------------------------------------
function send_request(url,callback) {//初始化、指定处理函数、发送请求的函数
    http_request = false;
    //开始初始化XMLHttpRequest对象
    if(window.XMLHttpRequest) { //Mozilla 浏览器
        http_request = new XMLHttpRequest();
        if (http_request.overrideMimeType) {//设置MiME类别
            http_request.overrideMimeType("text/xml");
        }
    }
    else if (window.ActiveXObject) { // IE浏览器
        try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
    }
    if (!http_request) { // 异常,创建对象实例失败
        window.alert("不能创建XMLHttpRequest对象实例.");
        return false;
    }
    // 确定发送请求的方式和URL以及是否异步执行下段代码
    http_request.open('get', url, true);
    http_request.onreadystatechange=callback;
    http_request.send(null);
}------------------------------------------------------------------------------------------------
            function backInfo(){
                if (http_request.readyState == 4) { // 判断对象状态
                    if (http_request.status == 200) { // 信息已经成功返回,开始处理信息
                        document.getElementById("accountMessage").innerHTML = http_request.responseText;
                    } else { //页面不正常
                        alert("您所请求的页面有异常!");
                    }
                }
            }------------------------------------------------------------------------------------------------
Servlet:public class LoginServ extends HttpServlet {    private LoginDao ld=null;
    private int method;    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {        method=Integer.parseInt(request.getParameter("method"));        if(method==2){
            checkAccount(request,response);
        }
    }    public void  checkAccount(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html; charset=GBK");
        String account=(String)request.getParameter("username");        LoginDao ld=new LoginDao();
        PrintWriter out=response.getWriter();
        if (ld.getLoginForm(account)!=null){
            out.print("此用户名已存在!");
        }
        else{
            out.print("OK");
        }
    }
}就是当account这个文本框失去焦点的时候,自动显示出这个用户名是否注册过。通过ajax传递信息给servlet然后去数据库验证。LoginServ的url是/Login。LoginServ,LoginDao和getLoginForm方法都是没有问题的,因为我在不用ajax的情况下,直接跳转到'../Login?method=2&username='+name页面是可以显示出正确结果的,但是用了ajax之后,就卡在send_request('../Login?method=2&username='+name,backInfo);这句了。
麻烦大家给看看

解决方案 »

  1.   

    oofunction Ajax(url)
    {
    var xmlHttp=null;
    var m_OnSucceed=function(){};
    if(window.ActiveXObject)
    {
        try 
        {
            xmlHttp = new ActiveXObject('Msxml2.XMLHTTP'); 
        }
        catch(e)
        {
            try{xmlHttp = new ActiveXObject('Microsoft.XMLHTTP');}catch(e){}
        }
    }
    else if(window.XMLHttpRequest)
    {
        xmlHttp = new XMLHttpRequest();
    }

    this.OnSucceed=function(succeed)
    {
    m_OnSucceed=succeed;
    }

    this.post=function(d)
    {
        if(!xmlHttp)  return;
        xmlHttp.open('POST',url,false);
        xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;');
        xmlHttp.send(d);
        return eval(xmlHttp.responseText);
    }
    this.post2=function(d)
    {
        if(!xmlHttp)  return;
        xmlHttp.open('POST',url,false);
        xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;');
        xmlHttp.send(d);
        return xmlHttp.responseText;
    }
    }checkname
    function username_check()
    {
        var username = $F('username');
       $('usernameValidMsg').innerHTML="<span class=check_wait> </span>";
        if(username=='')
        {
            $('usernameValidMsg').innerHTML="<span class=check_error>请输入您的用户名。</span>";
            return false;
        }
        if(!/^[a-z0-9]{4,20}$/.test(username))//正则验证
        {
            $('usernameValidMsg').innerHTML="<span class=check_error>可由小写英文字母、数字组成,长度4-20个字符。</span>";
            return false;
        }    
        var username_checker_ajax = new Ajax("servlet/Register");//AJAX开始
        if(username_checker_ajax.post('username='+username))//传参返回值 true|false
        {
            $('usernameValidMsg').innerHTML="<span class=check_error>抱歉,该用户名已被使用,请重新输入!</span>";
            return false;
        }
        $('usernameValidMsg').innerHTML="<span class=check_right>恭喜您,该用户名可用</span>"
        return true;
    }
    page view<INPUT name="username" type="text" id="username" class="text_input" onblur="username_check()">
    servlet examplepublic void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    response.setContentType("text/html;charset=gbk");
    String username=request.getParameter("username");
    ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
    CustomerDAO cusdao=(CustomerDAO)context.getBean("CustomerDAO");
    List cuslist=cusdao.findByUsername(username);
    PrintWriter out = response.getWriter();
    if(cuslist.size()>0){
    out.println("1>0");//true
    }else{
    out.println("0>1");//false
    }
    out.flush();
    out.close();
    }
      

  2.   

       http_request.open('get', url, true); 
        http_request.onreadystatechange=callback; 
        http_request.send(null); 
    } ------------------------------------------------------------------------------------------------ 
                function backInfo(){ 
                    if (http_request.readyState == 4) { // 判断对象状态 
                        if (你的回调函数是http_request.onreadystatechange=callback;
    而你下面的方法是backInfo()这能行吗,根本就找不到回调的方法