我做一个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),显示的如下图,大家帮我看看这是为什么啊?
这个是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),显示的如下图,大家帮我看看这是为什么啊?
然后才是写入你要响应 回客户端的数据。最后到客户端解析出来!
<excludes>
<pattern>/ajax/*</pattern>
</excludes>
不然返回的就是你那个样子.
{
alert("用户名已被占用");
}
else
{
alert("用户名可以使用");
}
改成if(b=="true")
{
alert("用户名已被占用");
}
else
{
alert("用户名可以使用");
}
关注Java
if(xmlHttpRequest.readyState == 4 && xmlHttpRequest.status == 200)
{
var b = xmlHttpRequest.responseText;
alert(b);
.....
}
这一段代码可以看出,回显的应该是整个页面的源代码,而并不是true吧!
这句代码是干啥的 为什么要跳转啊???
执行了跳转, 然后 之前 在 response里 输出的东西 已经为清空了。所以得不到你想要的“TRUE”。这是跳转到一个JSP 页面 固然 response 里的 内容就变成了这个JSP里的内容
所以你alert(b) 才会显示这么多烂七八糟的HTML代码。。
你说的是AJAX教程 还是 Struts2教程