struts-hibernate-ajax完成区县和街道级联下拉框功能(二补充使用json解析list结果集,ajax循环json层级处理)...

针对《struts-hibernate-ajax完成区县和街道级联下拉框功能》进行补充,上一篇中,要在action中拼接JSON格式字符串,很容易手抖。直接用json处理一下转成json格式字符串即可。但之前也讲过,json对于hibernate级联关系的解析,不是很到位啊!

所以ajax那边就得层层循环剥离,找出想要的结果

action:

用的是

import com.alibaba.fastjson.JSON;

具体的jar包请自行百度!!

public String getStreets(){
        StreetDao streetDao=new StreetDaoImpl();
        try {
            streetlist = streetDao.getStreetsByDistrictId(Integer.parseInt(district_id));
            /*System.out.println("district_id=="+district_id);
            System.out.println(streetlist.size());*/

            String content = JSON.toJSONString(streetlist);
            /*ObjectMapper mapper = new ObjectMapper();
            String content = mapper.writeValueAsString(streetlist);*/
            HttpServletResponse response = (HttpServletResponse) ActionContext.getContext().get(ServletActionContext.HTTP_RESPONSE);  
            response.setCharacterEncoding("utf-8");
            System.out.println("array======="+content);
            response.getWriter().print(content); 
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

action只是小小的改动,但语法简单了很多。

出来的json结果是:

array=======[{"district":{"id":1,"name":"天河区","streets":[{"district":{"$ref":"$[0].district"},"id":4,"name":"天河区街道4"},{"district":{"$ref":"$[0].district"},"id":2,"name":"天河区街道2"},{"$ref":"$[0]"},{"district":{"$ref":"$[0].district"},"id":3,"name":"天河区街道3"}]},"id":1,"name":"天河区街道1"},{"$ref":"$[0].district.streets[1]"},{"$ref":"$[0].district.streets[3]"},{"$ref":"$[0].district.streets[0]"}]

看上去真是头疼,即使json格式清晰要想取streets的id和name也不很规律啊,我用了firefox的hj插件JSON-Handle格式化了一下控制台的json字符串

[
    {
        "district": {
            "id": 1,
            "name": "天河区",
            "streets": [
                {
                    "district": {
                        "$ref": "$[0].district"
                    },
                    "id": 4,
                    "name": "天河区街道4"
                },
                {
                    "district": {
                        "$ref": "$[0].district"
                    },
                    "id": 2,
                    "name": "天河区街道2"
                },
                {
                    "$ref": "$[0]"
                },
                {
                    "district": {
                        "$ref": "$[0].district"
                    },
                    "id": 3,
                    "name": "天河区街道3"
                }
            ]
        },
        "id": 1,
        "name": "天河区街道1"
    },
    {
        "$ref": "$[0].district.streets[1]"
    },
    {
        "$ref": "$[0].district.streets[3]"
    },
    {
        "$ref": "$[0].district.streets[0]"
    }
]

那么ajax怎么获取街道呢?

<script type="text/javascript" src="js/jquery-1.8.3.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function(){
            $("#district_id").change(function(){
                var district_id = $("#district_id").val();
                var url="<%=request.getContextPath()%>/streetlist";
                $.ajax({
                    url:url,
                    type:'post',
                    timeout:60000,
                    data:{"district_id":district_id},
                    dataType:'json',
                    success:function(data){
                        var $street_id = $("#street_id");
                        var $option =[];
                        $street_id.empty();
                        //循环整个json大数组
                        $.each(data,function(index,item){
                            //找出第一级的街道ID
                            if(item.id != '' && item.id !==undefined){
                                $option.push("<option value='"+item.id+"'>"+item.name+"</option>");
                            }
                            //级联关系下的街道ID
                            $.each(item.district.streets,function(inx,im){
                                if(im.id!='' &&im.id !==undefined){
                                    $option.push("<option value='"+im.id+"'>"+im.name+"</option>");
                                }
                            });
                                
                            $street_id.append($option);
                        });
                        option.push("");
                    },
                    error:function(){
                        alert("查询失败,请联系管理员");
                    },
                    
                });
            });
        
        });
        
    
    </script>

好吧,我也是一点点试的!不行就每一步alert呗!

 

转载于:https://www.cnblogs.com/sincoolvip/p/6164337.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值