jsp+Ajax判断邮箱、用户名是否存在的问题(急)

快跑蜗牛哥 2009-06-08 09:43:02
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<script type="text/javascript" language="javascript">
var xmlHttp=false;
var ShowObj="";
function AjaxCheck(url,httpMethod,Show_Obj)
{
ShowObj=Show_Obj;

if(!httpMethod)
{
httpMethod="POST";
}
xmlHttp=CreateXmlRequest();
xmlHttp.onreadystatechange=StateContent;
xmlHttp.open(httpMethod,url,true);
xmlHttp.send(null);
}
function StateContent()
{
if(xmlHttp.readyState==4)
{
if(xmlHttp.status==200)
{
MakeOperate();
}
}
}
function MakeOperate()
{
ShowObj.className = "Erro_Css";
//ShowObj.innerHTML = xmlHttp.responsetext;
ShowObj.innerHTML = xmlHttp.responseText;
}
</script>
<script type="text/javascript" language="javascript">
function CreateXmlRequest( )
{
var xmlhttp_request = false;

try
{
if( window.ActiveXObject )
{
for( var i = 5; i; i-- )
{
try
{
if( i == 2 )
{
xmlhttp_request = new ActiveXObject("Microsoft.XMLHTTP");
}
else
{
xmlhttp_request = new ActiveXObject("Msxml2.XMLHTTP." + i + ".0");
xmlhttp_request.setRequestHeader("Content-Type","text/xml");
xmlhttp_request.setRequestHeader("Content-Type","UTF-8");
}
break;
}
catch(e)
{
xmlhttp_request = false;
}
}
}
else if(window.XMLHttpRequest)
{
xmlhttp_request = new XMLHttpRequest();

if (xmlhttp_request.overrideMimeType)
{
xmlhttp_request.overrideMimeType('text/xml');
}
}
}
catch(e)
{
xmlhttp_request = false;
}

return xmlhttp_request ;
}

</script>
<script language="javascript">
function checkspace(checkstr)
{
var str = '';

for(i = 0; i < checkstr.length; i++)
{
str = str + ' ';
}

return (str == checkstr);
}

function getObj(objName)
{
return(document.getElementById(objName));
}

function Check_OK(Erro_ID)
{
var StrErro;
var Obj;

Obj=getObj(Erro_ID);
StrErro = "<table width='300' bgcolor=E2F5FF><tr><td align=left valign=middle class=tdborder>  <font color=red><B>ok!</B></font></td></tr></table>";
Obj.innerHTML = StrErro;
}

function Check_AssetOK(Erro_ID)
{
var StrErro;
var Obj;

Obj=getObj(Erro_ID);
StrErro = "<FONT COLOR=RED font-size:14px>资料载入中,请稍后...</FONT>";
Obj.innerHTML = StrErro;
}

function Show_Erro(Obj,Erro_Info)
{
Obj.innerHTML = Erro_Info;
}

function Check_Onfocus(Erro_ID,Words)
{
var Obj;
Obj=getObj(Erro_ID);
Obj.innerHTML = Words;
}
//Email验证
function Check_internetadd(Input_Value,Erro_ID)
{
var StrErro;
var Obj=getObj(Erro_ID);

if (Input_Value.length==0||checkspace(Input_Value))
{
StrErro = '<table width =300 bgcolor="#FFE2E9"><tr><td class=tdborder4 ><font color=red>  您输入的邮件地址有误,邮件地址不能为空。</font></td></tr></table>';
Show_Erro(Obj,StrErro);
return false;
}
var patn = /^[_a-zA-Z0-9\-]+(\.[_a-zA-Z0-9\-]*)*@[a-zA-Z0-9\-]+([\.][a-zA-Z0-9\-]+)+$/;

if(!patn.test(Input_Value))
{
var StrErro = '<table width=300 bgcolor=#FFE2E9><tr><td align=left valign=middle class=tdborder4>  <font color=red>请输入正确的邮件地址。</font></td></tr></table>';
Show_Erro(Obj,StrErro);
return false;
}
else
{

AjaxCheck("Job/Check_internet_add.jsp?internet_add="+Input_Value,"",Obj);
}

Check_AssetOK(Erro_ID);
return true;
}

//用户名验证
function Check_userlogin(Input_Value,Erro_ID)
{
var StrErro;
var Obj=getObj(Erro_ID);

if (Input_Value.length==0||checkspace(Input_Value))
{
StrErro = '<table width="300" bgcolor="#FFE2E9"><tr><td class=tdborder4 ><font color=red>  您好,用户名不能为空!</font></td></tr></table>';
Show_Erro(Obj,StrErro);
return false;
}
//长度验证
if(Input_Value.length<6||Input_Value.length>16)
{
SrtErro = '<table width="300" bgcolor="#FFE2E9"><tr><td class=tdborder4 ><font color=red>  长度不正确,由6-16位英文字母、数字、下划线组成。</font></td></tr></table>'
Show_Erro(Obj,SrtErro);
return false;
}
var patn=/^[a-zA-Z]{1}([a-zA-Z0-9]|[._]){5,15}$/; //匹配IP地址的正则表达式
if(!patn.test(Input_Value))
{
StrErro = '<table width="300" bgcolor="#FFE2E9"><tr><td class=tdborder4 ><font color=red>  以字母开头由6-16位英文字母、数字、下划线组成。</font></td></tr></table>';
Show_Erro(Obj,StrErro);
return false;
}
else
{

AjaxCheck("Job/Check_userlogin.jsp?user_login="+Input_Value,"",Obj);
}

Check_AssetOK(Erro_ID);
return true;
}//统一验证
function checkdata()
{
var pass = true;
if(!Check_internetadd(document.form1.internetadd.value,"Check")){
pass = false;
}
if(!Check_userlogin(document.form1.userlogin.value,"Check1")){
pass = false;
}
return pass;
}
</script>
<BODY topmargin="0" rightmargin="10" leftmargin="10">
<table border="0" cellpadding="0" cellspacing="0" height="407" width="720" style="margin-left:30px;margin-top:40px " >
<form name="form1" method="post" action="Job/StellaReg_ok.jsp" onsubmit="return checkdata();">
<tr>
<td width="100" height="40" align="right"><strong>电子邮件:</strong></td>
<td width="180" height="40" ><input type="text" size="30" name="internetadd" id="internetadd" onFocus="Check_Onfocus('check','<table width=100% bgcolor=E2F5FF><tr><td align=left valign=middle class=tdborder>  请准确填写您的E-MAIL地址。</td></tr></table>')" onBlur="Check_internetadd(this.value,'Check');"></td>
<td width="300" id="Check" height="40" >
<table width="300" height="40" >
<tr><td align=left valign=middle width="300" ><div style="width:300px;border:1px solid #CCCCCC;line-height:25px "> (请准确填写您的E-MAIL地址。) </div>
</td></tr></table>
</td>
</tr>
<tr>
<td width="100" height="40" align="right"><strong>用  户  名:</strong></td>
<td width="180" height="40" >
<input type="text" size="30" name="userlogin" id="userlogin" onFocus="Check_Onfocus('check1','<table width=100% bgcolor=E2F5FF><tr><td align=left valign=middle class=tdborder>  用户名必须为英文字母、数字、下划线或中文组成。</td></tr></table>')" onBlur="Check_userlogin(this.value,'Check1');">
</td>
<td width="300" id="Check1" height="40" >
<table width="300" height="40">
<tr><td align=left valign=middle width="300"><div style="width:300px;border:1px solid #CCCCCC;line-height:25px "> (以字母开头由6-16位英文字母、数字、下划线组成。) </div>
</td></tr></table>
</td>
</tr>
<tr>
<td width="100" height="30" align="right"> </td>
<td width="180"><input type="submit" value="确认" name="b1" ></td>
<td width="200"> </td>
</tr>
</form>
</table>
</BODY>
</HTML>

对应的Check_internet_add.jsp页面如下
<HTML>
<%
String internetadd="";

internetadd=request.getParameter("internet_add");

%>
<HEAD>
<TITLE></TITLE>
</HEAD>
<jsp:useBean id="OracleConn" scope="application" class="stella.eip.OracleConn"/>
<body>
<%
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
String sql=null;
try{
conn=OracleConn.getConnection();
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
sql="select * from EIP_USERS where internetadd='"+internetadd+"' ";
rs=stmt.executeQuery(sql);
if(rs.next()){
out.println("<table width=300 bgcolor=#FFE2E9><tr><td align=left valign=middle class=tdborder><font color='red'><b>"+internetadd+"</b></font>已经存在.</td></tr></table>");
} else {
out.println("<table width=300 bgcolor=E2F5FF><tr><td align=left valign=middle class=tdborder><font color='red'><b>"+internetadd+"</b></font>可以使用.</td></tr></table>");
}
rs.close();
}catch(Exception sqle){
out.print(sqle);}
finally {
if (stmt != null)stmt.close();
if (conn != null)conn.close();
}
%>

</body>
</HTML>
现在的问题是当某个邮箱或用户名显示存在时,页面也会提交,
请帮忙在以上程序基础上修改
...全文
490 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
garnettcwm 2009-06-09
  • 打赏
  • 举报
回复
是啊 异步返回数据问题 改为同步
william3033 2009-06-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 qw0907 的回复:]
引用 5 楼 william3033 的回复:
nod
楼主的代码只是在Check_internetadd调用了ajax的check,然后就return true;
你应该在MakeOperate里面做相关处理,然后在checkdata里面检查MakeOperate里面所作的处理,这样就ok了。


能帮我在代码上修改一下不,
TKS!!
[/Quote]
按照8楼的方法做吧,他的代码很好。
Go 旅城通票 2009-06-09
  • 打赏
  • 举报
回复
状态同步和代码逻辑没有处理好

你的ajax是异步执行,下面的红色的代码会继续执行返回true,这样就会提交表单了

else
{

AjaxCheck("Job/Check_userlogin.jsp?user_login="+Input_Value,"",Obj);
}

Check_AssetOK(Erro_ID);
return true;



改为同步提交,而且还得修改你的Check_userlogin方法

function AjaxCheck(url,httpMethod,Show_Obj)
{
ShowObj=Show_Obj;

if(!httpMethod)
{
httpMethod="POST";
}
xmlHttp=CreateXmlRequest();
//xmlHttp.onreadystatechange=StateContent;
xmlHttp.open(httpMethod,url,/*true*/false);//改为同步,这样不需要状态转换函数了
xmlHttp.send(null);
ShowObj.className = "Erro_Css";
//ShowObj.innerHTML = xmlHttp.responsetext;
ShowObj.innerHTML = xmlHttp.responseText;
//你返回了字符串,这样非常不明智的返回,应该直接返回true或者false,那么只能判断“可以使用”或者“已经存在”了
if(xmlHttp.responseText.indexOf("可以使用")!=-1)return true;//
else return false;

}


function Check_userlogin(Input_Value,Erro_ID)
{
var StrErro;
var Obj=getObj(Erro_ID);

if (Input_Value.length==0||checkspace(Input_Value))
{
StrErro = '<table width="300" bgcolor="#FFE2E9"><tr><td class=tdborder4 ><font color=red>  您好,用户名不能为空!</font></td></tr></table>';
Show_Erro(Obj,StrErro);
return false;
}
//长度验证
if(Input_Value.length<6||Input_Value.length>16)
{
SrtErro = '<table width="300" bgcolor="#FFE2E9"><tr><td class=tdborder4 ><font color=red>  长度不正确,由6-16位英文字母、数字、下划线组成。</font></td></tr></table>'
Show_Erro(Obj,SrtErro);
return false;
}
var patn=/^[a-zA-Z]{1}([a-zA-Z0-9]|[._]){5,15}$/; //匹配IP地址的正则表达式
if(!patn.test(Input_Value))
{
StrErro = '<table width="300" bgcolor="#FFE2E9"><tr><td class=tdborder4 ><font color=red>  以字母开头由6-16位英文字母、数字、下划线组成。</font></td></tr></table>';
Show_Erro(Obj,StrErro);
return false;
}
else
{
Check_AssetOK(Erro_ID);

return AjaxCheck("Job/Check_userlogin.jsp?user_login="+Input_Value,"",Obj);//========使用了不同,所以直接返回ajax的验证结果
}

//Check_AssetOK(Erro_ID);
//return true;
}//统一验证
快跑蜗牛哥 2009-06-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 william3033 的回复:]
nod
楼主的代码只是在Check_internetadd调用了ajax的check,然后就return true;
你应该在MakeOperate里面做相关处理,然后在checkdata里面检查MakeOperate里面所作的处理,这样就ok了。
[/Quote]
能帮我在代码上修改一下不,
TKS!!
快跑蜗牛哥 2009-06-09
  • 打赏
  • 举报
回复
非常感謝william3033 、showbo
快跑蜗牛哥 2009-06-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lihan6415151528 的回复:]
代码就不看了

首先测试一下有没有正确执行到前端
[/Quote]
//统一验证
function checkdata()
{
var pass = true;
if(!Check_internetadd(document.form1.internetadd.value,"Check")){
pass = false;
}
if(!Check_userlogin(document.form1.userlogin.value,"Check1")){
pass = false;
}
return pass;
}
应该执行了啊。
当执行AjaxCheck("Job/Check_internet_add.jsp?internet_add="+Input_Value,"",Obj);
时,如何判断Input_Value的值存在时回车false
快跑蜗牛哥 2009-06-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 apoet 的回复:]
AJAX是异步的 你的AJAX取数据还没取完就已经执行到下一步了也就是return true
你得在AJAX里面进行控制
[/Quote]
我在
function Check_internetadd(Input_Value,Erro_ID)
已做控制,
请问在Ajax中该如何修改,本人对Ajax不懂啊!!
长明 2009-06-08
  • 打赏
  • 举报
回复
AJAX是异步的 你的AJAX取数据还没取完就已经执行到下一步了也就是return true
你得在AJAX里面进行控制
lihan6415151528 2009-06-08
  • 打赏
  • 举报
回复
[Quote=引用楼主 qw0907 的帖子:]
现在的问题是当某个邮箱或用户名显示存在时,页面也会提交,
请帮忙在以上程序基础上修改 [/Quote]

代码就不看了

首先测试一下有没有正确执行到前端

shenzhenNBA 2009-06-08
  • 打赏
  • 举报
回复
jsp+Ajax判断邮箱、用户名是否存在的问题

冒似简单....思路:先JS判断邮箱、用户名是否合法,然后发送AJAX到SERVER查询,看看返回的结果接知道
william3033 2009-06-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 apoet 的回复:]
AJAX是异步的 你的AJAX取数据还没取完就已经执行到下一步了也就是return true
你得在AJAX里面进行控制
[/Quote]
nod
楼主的代码只是在Check_internetadd调用了ajax的check,然后就return true;
你应该在MakeOperate里面做相关处理,然后在checkdata里面检查MakeOperate里面所作的处理,这样就ok了。
用户名,Email地址,昵称 ajax无刷新验证是否已注册 非空验证 用户名验证:由英文字母和数字组成的4-16位字符,以字母开头! 邮箱验证:Email格式不正确,例如web@sohu.com 昵称验证:由汉字组成的2-8位字符! 密码验证:密码不能含有非法字符,长度在4-10之间 再次输入密码验证:两次输入密码不一致! 注册成功后用户直接保存在session里进入登录页面 搜索框实现智能联想(根据关键字联想贴吧名搜索) 登录成功用户保存在session中显示用户昵称 登录失败显示(登录失败!请重新) 注销可以销毁session中的用户对象 横条广告用flash制作替换效果 个人中心显示用户头像及昵称 奇吧朵朵展示留个贴吧信息(滚动文字) 最新话题展示最新发帖标题并可点击进入 常逛贴吧由用户登录后显示 贴吧分类显示不同类型贴吧鼠标移动上去展示贴吧名 热帖分类展示四个贴吧四条回复 热帖排行榜显示回复最多三个帖子 顶部展示贴吧名称,会员数,帖子数,以及帖吧简介 帖子显示回复次数,标题,内容25字符发帖昵称以及发帖时间 签到按钮可以判断是否登录,签到成功次数加一,提示以签到 显示用户头像和昵称 恢复按钮AJAX判断是否登录,登录后方可发帖 右侧游戏动态加载 翻页可实现看第一页,向前和向后翻页 顶部显示广告,帖子标题 只看楼主可实现只看楼主发表内容,取消只看楼主查看全部回复 显示回复用户头像和昵称,回复内容签名档,楼层,发表时间 关注AJAX判断用户是否已登录,关注成功次数加一,已关注提示 鼠标移动到用户头像可查看用户信息 实现翻页功能 回复条数,返回当前贴吧 回复按钮AJAX判断是否已登录,登陆后方可发帖 我的帖子显示吧名,标题,回复次数,发帖时间,删除提示,删除失败提示 我关注的帖吧显示把名,标题,回复次数,发帖时间,删除提示,删除失败提示

52,797

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧