基于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" onclick="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里得到