读书人

一个简单的ajax表单有关问题

发布时间: 2012-03-19 22:03:04 作者: rapoo

一个简单的ajax表单问题
我写了一个ajax程序,奇怪的是 用于用户注册时,程序运行正确;但在用户登录时,却出现问题。登录时填写的表单内容不能够提交到 struts 的 aciton ,总是传一个空值。 希望朋友们能够给与解决方法。

代码如下:
<%@ page language= "java " pageEncoding= "gb2312 "%>
<%@ taglib uri= "http://jakarta.apache.org/struts/tags-bean " prefix= "bean "%>
<%@ taglib uri= "http://jakarta.apache.org/struts/tags-html " prefix= "html "%>
<html>
<head>
<title> 用户登录 </title>

<script src= "js/net.js "> </script>
</head>
<body>
<script type= "text/javascript ">

var times=0;

var form = document.loginForm;

function subform(){

var gtext=this.req.responseText;

var info=document.getElementById( "info ");

if(gtext.indexOf( "validate_successful ")!=-1){

document.forms[ "form "].submit();


//当得到的值表示合法,则验证码通过。

}else{

times++;

if(times> =3){//如果连接3次输入错误,则重载图片,可以防止作弊和用户看不清图片;

info.innerHTML= "接连3次输入错误。更新验证码,请重新输入 ";

document.forms[ "form "].num.value= " ";

show(document.getElementById( 'random '));

times=0;

}else{

info.innerHTML= "第 "+times+ "次验证码错误,请注意区分大小写 ";

}

document.forms[ "form "].num.select();

}

}

function validata(obj){

var enter=true;

var info=document.getElementById( "info ");

var msg= " ";

if(obj.email.value.match(/^\s*$/g)){//如果未输入邮箱,提示

msg+= "请输入您的邮箱 <br> ";enter=false

}
if (obj.email.value.length!= 0)
{
for (i=0; i <obj.email.value.length; i++)
if (obj.email.value.charAt(i)== "@ ")
break;
if (i==obj.email.value.length)
{
msg+= "邮箱不合法 <br> ";enter=false
}

}

if(obj.pwd.value.match(/^\s*$/g)){//如果未输入密码,提示

msg+= "请输入您的密码 <br> ";enter=false

}

if(obj.num.value.match(/^\s*$/g)){//如果未输入验证码,提示

msg+= "请输入验证码 <br> ";enter=false

}

if(enter==true){

return subform();

}

if(enter==false){

info.innerHTML=msg;

return false;

}

var url= "num.jsp?num= "+obj.num.value;

var newxmlhttp=new net.ContentLoader(url,subform, " ", "get ",null,null);

return false;

}

function show(o){

//重载验证码

var timenow = new Date().getTime();

o.src= "random.jsp?d= "+timenow;

}

</script>

<html:form action= "/login " method= "post " onsubmit= "return validata(this); ">



您的邮箱: <input type= "text " name= "email " size=20> <br>

您的密码: <input type= "text " name= "pwd " size=20> <br>

验 证 码: <input type= "text " name= "num " size=10 maxlength= "4 ">

<img src= "random.jsp " id= "random " align= " " valign= "absmiddle " hspace= "5 ">

<a href= "javascript:show(document.getElementById( 'random ')) "> 验证码看不清 </a> <br>

<html:submit value= "确认 "/>    <a href= "register.jsp "> 还未注册?点击注册 </a> <br>

<div id=info style= "color:red;padding:10px;font-size:12px; "> </div>
</html:form>
</body>
</html>



[解决办法]
1. var form = document.loginForm; 能够得到form么? 用alert(form)看看是不是form已经得到.
2. if(enter==true){
return subform();
}
你的subform()函数有返回值么?
3. 直接调用action,并在url中用query string加入参数测试action

不是什么大问题 自己多修改测试几遍
[解决办法]
LZ的这个例子我也用过,刚刚自己改用Struts验证成功用Action控制跳转,没问题

你点submit按钮没反映的有2个原因,一种是没有通过验证,你看看是否有提示

第二种如果没有提示,则说明验证码输入无误,应该做这步

function subform(){
var gtext=this.req.responseText;
<!--alert(gtext);-->
var info=document.getElementById( "info ");
if(gtext.indexOf( "validate_successful ")!=-1){
<!--alert( "validate_successful ");-->
//info.innerHTML= " <font color=green> 验证码通过 </font> ";
document.forms[ "myform "].submit();
//当得到的值表示合法,则验证码通过。

读书人网 >Java Web开发

热点推荐