其他分享
首页 > 其他分享> > jquery,json异步处理请求的级联练习

jquery,json异步处理请求的级联练习

作者:互联网

jq,json省市级联练习笔记

级联方式一,在父标签下重写标签体

数据库数据

数据库数据

前端代码

1.将服务器传给后端的数据封装成json字符串响应给前端,前端通过回调函数拿到数据进行遍历
2.定义一个为“选择的option”的变量,将遍历出来的数据拼接存放到变量中
3.将变量使用html方法改变标签体,放在父标签下
4.每次改变都会重置标签体
5.所以需要注册一个改变事件,在改变事件中定义“地市”;

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/jquery-3.3.1.min.js"></script>
</head>
<body>
<select id="province">
    <option>==请选择省份==</option>
</select>
<select id="city">
    <option>==请选择城市==</option>
</select>
<script type="text/javascript">
    //页面加载后直接发送异步请求给数据库
    $.post({
        url:"AreaServlet",
        async:true,
        data:{pid:"0"},  //省份,直接给定键值对,值为0获得数据库中的省份
        dataType:"json",   //设置后端响应回来的数据格式
        success:function (areaList) {
            //判断返回的结果是否有值,有值为true,没值为false
            if(areaList){
                //将arealist结果转成jq对象,有值遍历结果集合
                var html = "<option>==请选择省份==</option>";
                $(areaList).each(function (i, area) {
                    html += "<option value='" + area.id + "'>" + area.name + "</option>";
                });
                //将html追加到复选框中
                $("#province").html(html);
                //当省份复选框被点击时,内容改变,所以给复选框注册一个改变事件
                $("#province").change(function () {
                    //发送异步请求给服务器
                    $.post({
                        url:"AreaServlet",
                        async:true,
                        data:{pid:$(this).val()},
                        dataType:"json",
                        success:function (cityList) {
                            var html = "<option>==请选择城市==</option>";
                            $(cityList).each(function (i, city) {
                                html += "<option value='" + city.id + "'>" + city.name + "</option>";
                            });
                            $("#city").html(html);
                        }
                    });
                });
            }
        },
        error:function () {
            alert("服务器忙......")
        }
    });
</script>
</body>
</html>

Servlet代码

后端的业务层,数据访问层等就不细写了,都是搬砖

package com.itheima.web;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.itheima.entity.Area;
import com.itheima.service.AreaService;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

@WebServlet(name = "AreaServlet", urlPatterns = "/AreaServlet")
public class AreaServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    //创建业务层对象,拿到List集合
    private AreaService areaService = new AreaService();
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获得异步请求传递的数据
        int pid = Integer.parseInt(request.getParameter("pid"));
        //调用业务层对象,拿到List集合
        List<Area> areaList = areaService.findAll(pid);
        //创建json转换对象
        ObjectMapper objectMapper = new ObjectMapper();
        //调用转换对象中的方法,将List集合转换成json字符串
        String jsonData = objectMapper.writeValueAsString(areaList);
        //将json字符串作为响应数据传递
        response.getWriter().write(jsonData);
    }
}

级联方式二,直接在父标签后追加拼接字段达到级联的目的

前端代码

1.将服务器传给后端的数据封装成json字符串响应给前端,前端通过回调函数拿到数据进行遍历
2.定义一个为空字符串的变量,将遍历出来的数据拼接存放到变量中
3.将变量追加在父标签下
4.因为拼接的字符串会累加,越积越多;当改变省份时,地市应该清空值,重新写入新的拼接字符串
5.所以需要注册一个改变事件,在改变事件中定义“地市”;

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/jquery-3.3.1.min.js"></script>
</head>
<body>
<select id="province">
    <option>==请选择省份==</option>
</select>
<select id="city">
    <option>==请选择城市==</option>
</select>
</body>
<script>
    $.post({
        url:"AreaServlet",      //服务器路径
        async:true,         //异步处理
        data:{pid:"0"},     //键值对
        dataType:"json",        //接收为json格式
        success:function (areaList) {       //回调函数拿到服务器给的结果数据
            var html = "";      //定义空字符串变量
            $(areaList).each(function (i,province) {        //将结果数据进行遍历,拿到每一个省份
                html += '<option value="' + province.id + '">' + province.name + '</option>';       //进行拼接
            });
            $("#province").append(html);        //将拼接变量追加到父标签中
            $("#province").change(function () {     //创建省份标签改变事件
                $.post({
                    url:"AreaServlet",      //服务器路径
                    async:true,         //异步处理
                    data:{pid:$(this).val()},       //键值对
                    dataType:"json",        //接收为json格式
                    success:function (areaList) {       //回调函数拿到服务器给的结果数据
                        var cityHtml = "";      //定义空字符串变量
                        $(areaList).each(function (i,city) {         //将结果数据进行遍历,拿到每一个地市
                            cityHtml += '<option value="' + city.id + '">' + city.name +'</option>';        //进行拼接
                        });
                        $("#city").html("<option>==请选择城市==</option>");      //当省份复选框改变时,地市复选框需要重置,这里为重置
                        $("#city").append(cityHtml);        //地市复选框重置后,再将拼接变量追加其中,即可
                    }
                });
            });
        },
        error:function () {
            alert("服务器忙....")
        }
    });
</script>
</html>

后端servlet代码与方式一基本一致

标签:jquery,异步,function,标签,json,html,import,areaList
来源: https://blog.csdn.net/JustAL_/article/details/92406679