最近在看一个项目视频,上面使用了ajax来验证用户名是否有被注册 ,但是它使用的是servlet+ajax来验证,但是我觉得这样有点麻烦,
因为还要单独写一个servlet来处理数据,何不就在action当中来完成这样的操作呢?我是新人,可能我有些地方不懂,希望懂的提出来指正一下
我们互相学习!下面是代码
ajax引擎:
function ajax(){
var xmlHttp;
try{ // Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e){
try{// Internet Explorer
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e){
try{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e){}
}
}
return xmlHttp;
}
其实我个人是反感给各种功能 函数取各种一看就不知其所以然的名字,比如说这个a函数 叫做ajax引擎,是在是让我无法理解,这样很不利于初学者的学习和使用!反正而会让人觉得云里雾里!
javascript验证函数:
function checkLogonName(){
/* logonName */
var logonName = document.getElementById("logonName").value;
var xhr = ajaxFunction();
xhr.onreadystatechange = function(){
if(xhr.readyState==4){
if(xhr.status==200){
var data = xhr.responseText; //获取文本
if(data=="1"){
alert("该用户名已经被注册");
document.getElementById("logonName").value="";
document.getElementById("logonName").focus();
return false;
}else{
return true;
}
}
}
}
xhr.open("post","system/elecUserAction_logonNameCheck.do",true);
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xhr.send("logonName="+logonName);
}
我的设置是假设从数据库返回的值是1的话,就说明这个用户登录名已经被注册了,就弹出一个alert提示用户换一个名字,并且清空输入框的内容!
当然你也可以可以做你喜欢的提示操作,毕竟alert用户友好上面还是由欠缺的!
java action 代码:
public String logonNameCheck(){
String logonName=request.getParameter("logonName");
String checkRes = elecUserService.checkLogonName(logonName);
response.setContentType("text/html;charset=utf-8");
PrintWriter out=null;
try {
out = response.getWriter();
} catch (IOException e) {
e.printStackTrace();
}
out.print(checkRes);
out.flush();
out.close();
return null;
}
这里我只贴出了处理这个登录名验证的代码,其他的没有贴出!我的action实现了ServletRequestAware,ServletResponseAware这两个类 所以可以直接使用
response和request 当然你必须要重写一下那两个方法,很简单的!
这边不需要返回任何字符串,因为我还要停留在当前页面,所以返回的是null,
struts那边也没有什么需要配置的,因为我使用的是动态方法通配符调用,只需要配置好action就好了!
就像这样
<action name="elecUserAction_*" class="elecUserAction" method="{1}">
</action>
因为我还使用了spring,所以class这里我只写spring容器内部的beans的名字就可以 ,不用写全类名