我做一个Ajax的练习,希望注册的时候,查看一下用户名有没有重复
这个是Action里面的代码:
public String execute() throws Exception 
        {
String lName = reqeust.getParameter("loginName");
     String lPwd = reqeust.getParameter("loginPwd");
    
     int i = biz.register(lName);
   
     //中文
     ServletActionContext.getResponse().setContentType("text/html;charset=utf-8");
     PrintWriter out = ServletActionContext.getResponse().getWriter();
    
     //PrintWriter out = response.getWriter();
if(i==1)
{
//这个用户名已经被使用了
out.print("true");
reqeust.getRequestDispatcher("bbsIndex.jsp").forward(reqeust, response);
}
else
{
                  //用户名可以使用
out.print("false");
}
//Ajax都要写null
return null;
}
页面的javaScript代码:var xmlHttpRequest;
  
//生成xmlHttpRequest对象
   function createXmlHttpRequest()
   {
     if(window.ActiveXObject)
     {
      //如果是IE浏览器
      return new ActiveXObject("Microsoft.XMLHTTP");
     }
     else if(window.XMLHttpRequest)
     {
        //非IE浏览器
        return new XMLHttpRequest();
     }
   }function ajax(olName)
  {   
     //得到用户名和密码
     var uname = document.getElementById('lname').value;
     var upwd = document.getElementById('lpwd').value;
     //用来做非空验证
    
     if(!uname)
     {
      alert("用户名不能为空!");
      olName.focus();
      return;
     }
      
     var url = "UserAction.action?loginName="+uname+"&loginPwd="+upwd;     xmlHttpRequest = createXmlHttpRequest();
     
     xmlHttpRequest.onreadystatechange = haoLeJiaoWo;
  
     xmlHttpRequest.open("GET",url,true);
     
     xmlHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
     
     //4.发送请求
     xmlHttpRequest.send("lName="+uname);
  }
   
   function haoLeJiaoWo()
   {
    if(xmlHttpRequest.readyState == 4 && xmlHttpRequest.status == 200)
    {
      var b = xmlHttpRequest.responseText;
      alert(b);  //关键是这里!!!!!!!!!!!!!!!!!!!
      if(b=="true")
      {
       alert("用户名已被占用");
      }
      else
      {
       alert("用户名可以使用");
      }
    }
   }
我传递回来的值是"true",用变量b来接收,但得不到我想要的值,if...else...选择语句总走else代码段,我alert(b),显示的如下图,大家帮我看看这是为什么啊?

解决方案 »

  1.   

    xmlHttpRequest.send(null);这可以设置成空啊
      

  2.   

     首先在你的返回中你要设置你的响应头:resp.setHeader();
     然后才是写入你要响应 回客户端的数据。最后到客户端解析出来!
      

  3.   

    你是不是用了什么布局的框架, 比如你用sitemesh的话, 就要把ajax的请求exclude掉:
      <excludes>
        <pattern>/ajax/*</pattern>
      </excludes>
    不然返回的就是你那个样子. 
      

  4.   

    if(b)//或者(b==true)
      {
      alert("用户名已被占用");
      }
      else
      {
      alert("用户名可以使用");
      }
    改成if(b=="true")
      {
      alert("用户名已被占用");
      }
      else
      {
      alert("用户名可以使用");
      }
      

  5.   

    我就用的SSH框架.. 别的什么DWR 都没使
      

  6.   

    这个 responseText 写法怎么这么像我博客里的文章里的写法。 郁闷。这个是因为你返回时 后台跳到了bbsIndex.jsp 这张页面。而你前台是ajax请求的 所以返回了源代码。
    关注Java
      

  7.   

    你要做的是 这个方法永远只有 true 或 flase 最好不要试图用request跳转 
      

  8.   

    哇  为什么不用jquery呢
      

  9.   

    你运行的结果我打不开,但从
    if(xmlHttpRequest.readyState == 4 && xmlHttpRequest.status == 200)
      {
      var b = xmlHttpRequest.responseText;
      alert(b); 
    .....
    }
    这一段代码可以看出,回显的应该是整个页面的源代码,而并不是true吧!
      

  10.   

    那我应该怎样写才能得到true 呢? 大家指点一下
      

  11.   

    reqeust.getRequestDispatcher("bbsIndex.jsp").forward(reqeust, response);
    这句代码是干啥的 为什么要跳转啊???
      

  12.   

    你alert(b)怎么显示出这么多东西。。 可能是应为 reqeust.getRequestDispatcher("bbsIndex.jsp").forward(reqeust, response);
    执行了跳转, 然后 之前 在 response里 输出的东西 已经为清空了。所以得不到你想要的“TRUE”。这是跳转到一个JSP 页面 固然 response 里的 内容就变成了这个JSP里的内容
    所以你alert(b) 才会显示这么多烂七八糟的HTML代码。。
      

  13.   


    你说的是AJAX教程 还是 Struts2教程