日期:2014-05-17  浏览次数:20689 次

struts2串行化json的问题
我刚刚学习ajax,随便试了下,发现好多疑惑。环境:struts2.2.3+jquery

Action类
Java code

public class AjaxAction extends ActionSupport{
    
    private User user;
    private User user2;
    private String username;
    
    @Override
    public String execute() throws Exception {
        user = new User();
        user.setUsername(username);
        user.setId(1);
        user.setPassword("aaaa1");
        
        user2 = new User();
        user2.setId(2);
        user2.setPassword("22222222222");
        user2.setUsername("222");
        
        return SUCCESS;
    }
和get、set方法


struts.xml
XML code

<result type="json" name="success"></result>



在js里面
JScript code

function clickButton()
            {    
                var url = "<%=basePath%>ajax/ajax";
                var params = {
                        username:$("#name").val()
                };
                $.post(url, params, callbackFun, "json");
            }
            function callbackFun(data)
            {
                alert(data);          //1
                //alert(data.user.id); //2
                //alert(data.id+";"+data.username+";"+data.password);  //3
            }


不管我怎么改,注释1都弹出[object Object]
注释2是直接错误
注释3是data.id和data.password都是underfind。data.username值正常

假如,我的action类改为
Java code

public class AjaxAction extends ActionSupport implements ModelDriven<User>{
    
    private User user= new User();
    
    @Override
    public String execute() throws Exception {
        user.setId(1);
        user.setPassword("aaaa1");
        
        return SUCCESS;
    }
        @Override
    public User getModel() {
        return user;
    }
和get、set方法


注释1还是[object Object]
注释2是直接错误
注释3却是正确的显示了。。

这是怎么回事?还是我的代码有什么问题?


------解决方案--------------------
function callbackFun(data){
for(var x in data){
alert( data[x] ); // 看看弹什么
}
}


------解决方案--------------------
JScript code

function callbackFun(data){
    for(var x in data){
        if( typeof data[x] == 'object' ){
            for(var y in data[x]){
                alert(data[x][y])
            }
        }else{
            alert(data[x])
        }
    }
}