日期:2014-05-16  浏览次数:20412 次

jquery获取action返回的json数据提示undefined或是null的问题

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