Ajax异步请求数据下拉框

  在做项目的时候,时常需要在后台获取一些数据,但是在若是在不刷新页面的前提下,就需要使用Ajax技术实现异步数据的请求。就比如:现在在页面上有一个下拉框,下拉框中的数据是需要来自数据库的,所以,我总不能每一次请求该页面时,都需要先执行controller中的处理,这样的话,会发现就是死情况、死代码,所以需要使用Ajax异步请求后台数据。

  先看最终的结果显示:

 

 

   如图中的下拉框就是我使用ajax实现请求的。那是如何做的呢?具体的执行,直接上代码:

  第一、既然是数据库信息,就先查询数据库

 

 

   mapper.xml

    <select id="getAllStudentGradeMapper" resultType="com.hui.pojo.StudentType">
        select * from splitpage.studenttype;
    </select>

  mapper接口

    /**
     * 返回所有的学生信息(用于返回所有的学生年级类型)
     */
    List<StudentType> getAllStudentGradeMapper();

  dao层的作用就是返回需要查询的数据(这个简单无需多言)

  第二、service业务层

  接口与接口实现类的代码:

import java.util.List;

public interface StudentTypeService {

    List<StudentType> getAllStudentTypeService();
}
import java.util.List;

@Service
public class StudentTypeServiceImpl implements StudentTypeService{

    @Autowired
    private StudentsMapper studentsMapper;

    public List<StudentType> getAllStudentTypeService() {
        return studentsMapper.getAllStudentGradeMapper();
    }
}

  现在业务层的作用就是调用dao层的代码(简单,无需多言)

  第三、controller层

import java.util.List;

@RestController
@RequestMapping("/admin")
public class StudentTypeController {

    @Autowired
    private StudentTypeService studentTypeService;

    @RequestMapping("/listType")
    public List<StudentType> getStudentTypeController() {

        System.out.println("异步的ajax请求数据");
        List<StudentType> typeService = studentTypeService.getAllStudentTypeService();
        System.out.println("返回的学生数据类型 : " + typeService);
        return typeService;

    }
}

注意:@RestController注解的作用:

  controller层的作用就是调用service层的代码,然后将list集合返回给前端。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

前端部分实现:

在后端controller类中,会仔细看到请求路径:/admin/listType

先将上面显示的图片的所有的jsp代码展示出来:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>table模块快速使用</title>
    <link rel="stylesheet" href="${pageContext.request.contextPath}/layui/css/layui.css" media="all">
</head>
<body>

<%--  搜索区域的设计  --%>
<form class="layui-form" action="">
    <div class="layui-form-item" style="margin-top: 30px">
        <label class="layui-form-label">输入关键字</label>
        <div class="layui-input-inline">
            <input type="text" name="title" style="width: 450px" required  lay-verify="required" placeholder="请输入关键字搜索..." autocomplete="off" class="layui-input">
        </div>
    </div>
    <div class="layui-form-item">
        <label class="layui-form-label">选择年级</label>
        <div class="layui-input-inline">
            <select name="studentType" lay-verify="required">
                <option value="">请选择...</option>
            </select>
        </div>
    </div>
    <div class="layui-form-item">
        <div class="layui-input-block">
            <button class="layui-btn" lay-submit lay-filter="formDemo">立即提交</button>
            <button type="reset" class="layui-btn layui-btn-primary">重置</button>
        </div>
    </div>
</form>

<!-- 表头工具栏 -->
<script type="text/html" id="headbar">
    <a class="layui-btn layui-btn-xs" lay-event="select"><i class="layui-icon layui-icon-file">新增</i></a>
    <a class="layui-btn layui-btn-xs" lay-event="edit"><i class="layui-icon layui-icon-edit">修改</i></a>
    <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-delete">删除</i></a>
</script>
<%--数据表格主体--%>
<table id="demo" lay-filter="test"></table>
<!-- 表行工具栏 -->
<script type="text/html" id="hangbar">
    <a class="layui-btn layui-btn-xs" lay-event="edit"><i class="layui-icon layui-icon-edit">编辑</i></a>
    <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-delete">删除</i></a>
</script>

<script src="${pageContext.request.contextPath}/layui/layui.js"></script>
<script>
    layui.use(['table','form'], function(){
        var table = layui.table;
        var form = layui.form;
        var $ = layui.$;
        //第一个实例
        table.render({
            elem: '#demo'
            ,height: 380
            ,url: '/admin/splitByMap' //数据接口
            ,page: true //开启分页
            ,toolbar:"#headbar"
            ,limit:6
            ,limits:[10,15,20,30,40,50,100]
            ,cols: [[ //表头
                {field: 'studentID', title: '学号', width:140,align:"center"}
                ,{field: 'studentName', title: '姓名', width:140,align:"center"}
                ,{field: 'studentSex', title: '性别', width:140,align:"center"}
                ,{field: 'studentPhone', title: '手机号', width:140,align:"center"}
                ,{field: 'studentAddress', title: '地址', width:140,align:"center"}
                ,{field: 'studentProfession', title: '专业', width:140,align:"center"}
                ,{field: 'studentGrade', title: '年级', width:140,align:"center"}
                ,{title: '年级',toolbar:'#hangbar', width:160,align:"center"}
            ]]
        });

        //发送异步Ajax请求查询账单类型
        $.get("/admin/listType",function (result) {
            console.log(result);
            var html = "";
            for (let i = 0; i < result.length; i++) {
                html += "<option value=' "+ result[i].id +"'>" + result[i].studentType + "</option>";
            }
            //将网页代码追加到下拉列表中
            $("[name='studentType']").append(html);
            //更新渲染select下拉框
            form.render("select");
        },"json");

    });
</script>
</body>
</html>

  我使用颜色圈起来的都是需要注意的,首先分别介绍:

  这是一个异步请求的核心前端代码:

        //发送异步Ajax请求查询账单类型
        $.get("/admin/listType",function (result) {
            console.log(result);
            var html = "";
这里使用for循环是因为后台返回的是List<>集合
for (let i = 0; i < result.length; i++) { html += "<option value=' "+ result[i].id +"'>" + result[i].studentType + "</option>"; } //将网页代码追加到下拉列表中 $("[name='studentType']").append(html); //更新渲染select下拉框 form.render("select"); },"json");

  会发现里面的form需要引入from的变量。

  

 

posted @ 2021-11-10 17:36  心向未来  Views(600)  Comments(0)    收藏  举报