JavaScript---Json、Ajax---省市区三级联动

JSON

JSON有两种格式:对象和数组
在这里插入图片描述

对象

整体用大括号, “ key ” 值用双引号,key值和value值之间用 “ :” 连接,并列的数据之间用 “ , ” 隔开。

Object{ "key1" : obj1 ,
        "key2" : obj2
}
Student:
{
    "id" : 12,
    "name" : "java1711",
    "age" : 20,
    "gender" : "男"
}

数组

整体用方括号,具体对象用大括号,“ key ” 值用双引号,key值和value值之间用 “ :” 连接,并列的数据之间用 “ , ” 隔开。

List<Object>:   [{},{}]
List<Student>:   
[
    {
       "id" : 12,
        "name" : "java1711",
        "age" : 20,
        "gender" : "男"
    }
    ,
    {
       "id" : 13,
        "name" : "java1712",
        "age" : 21,
        "gender" : "女"
    }
]

Ajax

最大特点:异步请求,不刷新整个页面,只刷新局部也叫局部刷新

什么是同步,什么是异步
**同步:**客户端发送请求到服务器端,当服务器返回响应之前,客户端都处于等待卡死状态
你现在传输,我要亲眼看着你传输完成,才去做别的事。

**异步:**客户端发送请求到服务器端,无论服务器是否返回响应,客户端都可以随意做其他事情,不会被卡死
你传输吧,我去做我的事了,你传输完了告诉我一声。

Jquery的Ajax技术

对js原生的ajax进行了封装,开发中经常使用的有三种:

get和post

$.get(url, [data], [callback], [type])  
$.post(url, [data], [callback], [type])

其中:
中括号表示可有可无

  • url:代表请求的服务器端地址,必须有
  • data:代表请求服务器端的数据(可以是key=value形式也可以是json格式)
  • callback:回调函数,表示服务器端成功响应所触发的函数
  • type:表示服务器端返回的数据类型(jquery会根据指定的类型自动类型转换) 常用的返回类型:text、json、html等

ajax

$.ajax( { option1:value1,option2:value2... } ); 

常用的option有如下:

  • async:是否异步,默认是true代表异步。(get/post方式只能异步,不能配置)
  • type:请求方式,POST/GET(常用post)
  • url:请求服务器端地址 data:发送到服务器的参数,建议使用json格式
  • success:成功响应执行的函数,对应的类型是function类型
  • dataType:服务器端返回的数据类型,常用text和json

实例-省市区三级联动

基本思路

1.配置页面

对于页面所需要的数据有两种获得方法:servlet 拿到数据集合然后 for 循环进行遍历(只有省份可以)或者servlet 拿到数据集合之后直接访问jsp发送ajax请求,然后用jQuery的append进行拼接。

2.先查找省份

通过servlet查出封装成集合,然后转化成JSON格式的数组。因为JSON只有两种结构:对象和数组。所以有专门的工具类可以直接将list转化成JSON格式的 { } 或 [ ] 。

3.绑定相应的市、区

用事件 onchage ,即当发生改变时会触发,这里有一个隐藏的this,this相当于option的dom对象

4.清理

将在发送ajax之前将之前的数据清理掉 以防影响体验。

代码

jsp文件代码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    省:<select id="provinceId" onchange="selectCity(this)">
        <option>-----请选择-----</option>
    </select>
    市:<select id="cityId" onchange="selectArea(this)">
        <option>-----请选择-----</option>
    </select>
    区:<select id="areaId">
        <option>-----请选择-----</option>
    </select>

    <script src="<%=request.getContextPath()%>/static/jquery-2.1.4.js" type="text/javascript" charset="UTF-8"></script>
    <script type="text/javascript">
        $(function(){
            $.post(
<%--            url--%>
               '<%=request.getContextPath()%>/address?method=selectProvince',
<%--               callback--%>
                function(jsonObj){
                    console.log(jsonObj);
                    $(jsonObj).each(function(){
                        $('#provinceId').append('<option value="'+this.id+'">' + this.provinceName + '</option>');
                    });
                },
<%--                type--%>
                'json'
            );
        });

        function selectCity(obj){
            console.log(obj);
            var provinceId = $(obj).val();
            $.post(
                '<%=request.getContextPath()%>/address?method=selectCity',
                {'provinceId' : provinceId},
                function(jsonObj){
                    console.log(jsonObj);

                    $('#cityId option:gt(0)').remove;
                    $(jsonObj).each(function(){
                        $('#cityId').append('<option value="'+this.id+'">' + this.cityName + '</option>');
                    });
                },
                'json'
            );
        }

        function selectArea(obj){
            console.log(obj);
            var cityId = $(obj).val();
            $.post(
                '<%=request.getContextPath()%>/address?method=selectArea',
                {'cityId' : cityId},
                function(jsonObj){
                    console.log(jsonObj);

                    $('#areaId option:gt(0)').remove;
                    $(jsonObj).each(function(){
                        $('#areaId').append('<option value="'+this.id+'">' + this.areaName + '</option>');
                    });
                },
                'json'
            );
        }
    </script>
</body>
</html>

servlet代码

@WebServlet("/address")
public class AddrServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("AddrServlet.service");

        String method = req.getParameter("method");
        switch (method){
            case "selectProvince":
                selectProvince(req,resp);
                break;
            case "selectCity":
                selectCity(req,resp);
                break;
            case "selectArea":
                selectArea(req,resp);
                break;
        }
    }

    private void selectArea(HttpServletRequest req, HttpServletResponse resp) {
        System.out.println("AddrServlet.selectArea");

        int cityId = Integer.parseInt(req.getParameter("cityId"));
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        ArrayList<Area> list = new ArrayList<>();
        try {
            connection = JDBCUtil.getConnection();
            String sql = "select id, area from tm_area where city_id=?";
            preparedStatement = connection.prepareStatement(sql);
            preparedStatement.setInt(1,cityId);
            System.out.println(preparedStatement);
            resultSet = preparedStatement.executeQuery();
            while (resultSet.next()){
                int id = resultSet.getInt("id");
                String areaName = resultSet.getString("area");
                Area area = new Area(id, areaName);
                list.add(area);
            }
            for (Area area : list) {
                System.out.println(area);
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            JDBCUtil.close(connection,preparedStatement,resultSet);
        }
        JSONUtil.array2Json(list, resp);
    }

    private void selectCity(HttpServletRequest req, HttpServletResponse resp) {
        System.out.println("AddrServlet.selectCity");

        int provinceId = Integer.parseInt(req.getParameter("provinceId"));
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        ArrayList<City> list = new ArrayList<>();
        try {
            connection = JDBCUtil.getConnection();
            String sql = "select id, city from tm_city where province_id=?";
            preparedStatement = connection.prepareStatement(sql);
            preparedStatement.setInt(1,provinceId);
            System.out.println(preparedStatement);
            resultSet = preparedStatement.executeQuery();
            while (resultSet.next()){
                int id = resultSet.getInt("id");
                String cityName = resultSet.getString("city");
                City city = new City(id,cityName);
                list.add(city);
            }
            for (City city : list) {
                System.out.println(city);
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            JDBCUtil.close(connection,preparedStatement,resultSet);
        }
        JSONUtil.array2Json(list, resp);
    }

    private void selectProvince(HttpServletRequest req, HttpServletResponse resp) {
        System.out.println("AddrServlet.selectProvince");

        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        ArrayList<Province> list = new ArrayList<>();
        try {
            connection = JDBCUtil.getConnection();
            String sql = "select id, province from tm_province";
            preparedStatement = connection.prepareStatement(sql);
            System.out.println(preparedStatement);
            resultSet = preparedStatement.executeQuery();
//            System.out.println("ok");
            while (resultSet.next()){
                int id = resultSet.getInt("id");
                String provinceName = resultSet.getString("province");
                Province province = new Province(id, provinceName);
                list.add(province);
            }
            for (Province province : list) {
                System.out.println(province);
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            JDBCUtil.close(connection,preparedStatement,resultSet);
        }
        JSONUtil.array2Json(list, resp);
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值