基于SSH框架搭建个小网站,登陆框用jquery实现,前台一直得不到action返回的值。不是undefined就是null。具体代码如下:
Action:
public class LoginAction extends ActionSupport {
private String userName;
private String password;
private String loginResult;
protected UserManage umanage;
public String execute() throws Exception{
if(userName.equals("") || userName == null){
loginResult="用户名不能为空";
return ERROR;
}
else if(password.equals("") || password == null){
loginResult="密码不能为空";
return ERROR;
}else{
String result = umanage.validLogin(userName, password);
if(result != null){
loginResult = result;
return ERROR;
}
}
return SUCCESS;
}
jsp:
<form class="login-form" style="width: 400px" action="login" method="post" enctype="multipart/form-data">
<div class="input-group">
<span class="icon-user2 input-group-addon" style=" color: #b2bcc5;background-color: #ffffff"></span>
<input id="userName" name="userName" type="text" class="form-control" placeholder="用户名"/>
</div>
<div style="height: 15px"></div>
<div class="input-group">
<span class="icon-lock2 input-group-addon" style=" color: #b2bcc5;background-color: #ffffff"></span>
<input id="password" name="password" type="password" class="form-control" placeholder="密码" >
</div>
<div class="input-group" style="display:none" id="warning">
<span id="warning1"></span>
</div>
<div class="input-group">
<label class="checkbox" for="checkbox1">
<input type="checkbox" id="checkbox1" data-toggle="checkbox">
记住密码
<a href="#" style="position: relative;left:170;">忘记密码?</a>
</label>
</div>
<button id="login" οnclick="testLogin()" type="button" class="btn btn-primary" style="width: 353px">登录</button>
</form>
<script type="text/javascript">
$("#login").click(function(){
var params = {
userName : $("#userName").val(),
password : $("#password").val()
};
$.ajax({
type : "POST",
url : "login",
data : params,
dataType : "json", //ajax返回值设置为text(json格式也可用它返回,可打印出结果,也可设置成json)
success : function(json) {
$("#warning1").each(function(){
$(this).html(json);
});
$("#warning").show();
},
error:function(json){
alert(json);
return false;
}
});
});
</script>
struts.xml
<package name="UserAction" namespace="/" extends="json-default"> <action name="login" class="loginAction" > <result type="json"> <param name="root">loginResult</param> </result> </action
测试的不输入用户名密码,或是密码错误等情况的时候,都会提示错误信息。但是每次都没有任何信息,所以就在error时直接抛出,结果每次出现undefined或是null。
错误的原因是:我对jquery的success和error理解错了,这里的不是我们在action里定义的return的情况,二是它前台自身出现的结果。而我们对不同输入return不同的结果,对于jquery来说,如果都能捕获的话都属于success情况,而不是error。而我们在action里返回error时会给jquery造成误解。
所以有两种修改方式:
一、我们可以修改struts配置文件
<action name="login" class="loginAction" > <result name="error" type="json"> <param name="root">loginResult</param> </result> <result name="success">/index.jsp</result> </action>
把error当作返回的类型,不是告诉前台出现错误,因为我们在action里定义的error只是一种返回的情况,而不是出现了错误。这样jquery就能在success里得到loginResult的值,并显示出来。
二、可以修改action里return的值,把error改成其他的值,input或是"ssss"其他的string类型值,这样jquery捕获action时就不会把它当作error情况处理了,而是success或是done,这样也能正确得到json值。