JQuery中Ajax实现对Map,List集合数据的接收

jQuery中Ajax接收后台Map、List集合数据实现过程

最近学习到jQuery实现异步传输数据部分,虽然跟着视频演练了常规json数据的接收,但个人感觉不太够,现实应用中肯定不只是传输简短以及简单的json数据,于是自己琢磨着尝试从后台接收List、Map数据,在搜索工具的帮助以及自身的理解下,成功完成了接收过程。废话不多说,以代码来展示过程:

* 前端jsp登录端代码+js代码

//body部分
<body>
    <div id="loginDemo">
        用户名:<input type="text" id="username"><br>
        密&nbsp;码<input type="password" id="password"><br>
        <input type="button" value="登录" id="btn"/><br>
        <span id="msg"></span>
    </div>
    <div id="showUsers"></div>
</body>
//js部分
$(document).ready(function(){
    $("#btn").click(function(){
        var params ={"user.username":$("#username").val(),
                                "user.password":$("#password").val()};
        $.ajax({
            url:"login",
            type:"post",
            data:params,//将json数据传给后台,供后台处理
            dataType:"json",
            success:function(data){
            if(data.msg=="登陆成功!"){
                //以User对象方式接收
                $("#loginDemo").append(data.user.username+"<br>");
                //以List集合对象users接收,在后台是集合对象,但传回前台后自动转换成了数组对象
                $("#loginDemo").append(data.users[0].username+"<br>");
                //以Map对象m接收,Ajax默认支持Map类型数据,细想一下,map型数据不有点像json数据吗
                $("#loginDemo").append(data.m.user1.username+"<br>");
            }else
                $("#msg").html("");
                $("#msg").append(data.msg);
            },
            error:function(){
                alert("登陆失败!")
            }
        })
    });
});
前端部分代码比较简单,就是一个登陆框,以json数据格式的方式提交给后台,请求成功时,输出传回的实体对象型数据,List集合型数据,以及关键的Map型集合数据

struts.xml核心部分代码

<package name="default" namespace="/" extends="json-default">
        <action name="login" class="com.cn.action.UserAction" method="login">      
            <result type="json">
                <param name="includeProperties">
                    user.*,users.*,msg,m.*
                </param>
            </result>
        </action>
    </package>
//注意一定要继承json-default,且要提前引入相关的jar包,对于代码里面各参数的作用以及用法就不作过多赘述了

action中核心代码

public class UserAction extends ActionSupport {
    private User user;
    private List<User> users;
    private Map<String,User> m ;
    private String msg;

    public String login(){
        if("admin".equals(user.getUsername())&&"111111".equals(user.getPassword())){
            user = new User("admin","111111");
            //创建集合对象
            users = new ArrayList<User>();
            users.add(new User("Linda","memeda"));
            users.add(new User("Mary","lalala"));
            users.add(user);
            //创建map对象
            m = new HashMap<String,User>();
            m.put("user1", new User("XiaoJing","yuyuyu"));
            m.put("user2", new User("KangGe","kangying"));

            msg = "登陆成功!";
        }else{
            msg = "登录失败3";
        }
        return SUCCESS;
    }
    //后续对成员属性的setter和getter方法没有列出,没有列出并不代表不重要,如果没有设置setter和getter方法是无法获取到前台发过来的数据的。


列出此过程几个比较重要的核心知识点
  1. 前台Ajax的格式书写,包括发送给后台的json数据,以及对后台传回数据的接收,注意map、list以及实体对象型数据的接收方式。对于数组类型的数据还存在遍历的问题,过程并不复杂,故此处并未列出
  2. struts.xml的配置。在struts.xml中,必须继承json-default,而继承此package又需要相关的jar包支持,因此必须在项目开始前引入徐昂管的jar包。struts.xml中还应注意< result >中type属性应为json,默认的是dispatcher,进行json数据传输时一定得改为json。最后就是< param >的includeProperties属性。此处是设置传回前台的数据类型。哪些可以传回去,哪些不行,都可以在此处进行设置,类似于过滤的作用
  3. action的编写,一定要继承自actionSupport(实现action接口也可以,不过相对要麻烦一些)。然后就是为相关属性设置setter和getter方法,这一步是必须的,不然接收不到前台传来的数据。最后就是在指定的方法中进行相关的业务处理,过程并不复杂。
  4. 外加一个刚遇到的一个问题。当从后台返回的数据仅有一个字符串时,若想从前台取出该字符串,直接调用data即可,不用写成”data.XXX”的形式。写了反而会报undefined的错误。谨记谨记

欢迎对此还有疑问的小伙伴在评论去留言,我有空时会及时解答的(づ。◕‿‿◕。)づ
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值