zoukankan      html  css  js  c++  java
  • 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呗!

  • 相关阅读:
    C#随笔
    C# 程序间通信的各种途径及解析
    C#控件根据窗体改变大小
    c# SqlHelper Class
    初始Java
    函数基础
    基本数据类型的高级特性:
    python基础
    C#double转化成字符串 保留小数位数, 不以科学计数法的形式出现。
    Oracle使用dblink导入数据
  • 原文地址:https://www.cnblogs.com/sincoolvip/p/6164337.html
Copyright © 2011-2022 走看看