• Ajax入门——第一节:案例:用jQuery和Ajax编码的图书管理系统


    8. 案例 - 图书管理

    8.1 渲染UI结构

    在这里插入图片描述

    8.2 案例用到的库和插件

    用到的 css 库 bootstrap.css
    用到的 javascript 库 jquery.js
    用到的 vs code 插件 Bootstrap 3 Snippets

    步骤:

    1.先导入bootstrap.cssjquery.js
    2.然后写HTML文件,利用Bootstrap 3 Snippets插件,进行页面的渲染,如下:
    在这里插入图片描述

    1. 输入bs3 选择需要用的代码块,按下回车键,就可以得到相应的框架

    加粗样式
    5. 运行的结果如下:
    在这里插入图片描述
    6.继续渲染UI界面,输入bs3-input 插入输入框
    在这里插入图片描述
    7.按下enter键,产生如下代码:
    在这里插入图片描述
    在这里插入图片描述
    8.复制类名为input-group的类,产生3个输入框,再写一个按钮
    在这里插入图片描述
    9. 渲染的ui效果如下
    在这里插入图片描述
    10.为了让3个输入框和一个按钮横向排列,在总类里面加入form-inline类名即可,为了美观,并加个边距padding
    在这里插入图片描述
    在这里插入图片描述

    11.结果:
    在这里插入图片描述
    12.表格,输入bs3-table,选择需要的代码块

    8.3 渲染图书列表(核心代码)

    function getBookList() {
        // 1. 发起 ajax 请求获取图书列表数据
        $.get('http://www.liulongbin.top:3006/api/getbooks', function(res) {
            // 2. 获取列表数据是否成功
            if (res.status !== 200) return alert('获取图书列表失败!')
            // 3. 渲染页面结构
            var rows = []
            $.each(res.data, function(i, item) { // 4. 循环拼接字符串
                rows.push('<tr><td>' + item.id + '</td><td>' + item.bookname + '</td><td>' + item.author + '</td><td>' + item.publisher + '</td><td><a href="javascript:;">删除</a></td></tr>')
            })
            $('#bookBody').empty().append(rows.join('')) // 5. 渲染表格结构
        })
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    8.4 删除图书(核心代码)

    // 1. 为按钮绑定点击事件处理函数
    $('tbody').on('click', '.del', function() {
        // 2. 获取要删除的图书的 Id
        var id = $(this).attr('data-id')
        $.ajax({ // 3. 发起 ajax 请求,根据 id 删除对应的图书
            type: 'GET',
            url: 'http://www.liulongbin.top:3006/api/delbook',
            data: { id: id },
            success: function(res) {
                if (res.status !== 200) return alert('删除图书失败!') 
                getBookList() // 4. 删除成功后,重新加载图书列表
            }
        })
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    8.5 添加图书(核心代码)

    // 1. 检测内容是否为空
    var bookname = $('#bookname').val()
    var author = $('#author').val()
    var publisher = $('#publisher').val()
    if (bookname === '' || author === '' || publisher === '') {
        return alert('请完整填写图书信息!')
    }
    // 2. 发起 ajax 请求,添加图书信息
    $.post(
        'http://www.liulongbin.top:3006/api/addbook',
        { bookname: bookname, author: author, publisher: publisher },
        function(res) {
            // 3. 判断是否添加成功
            if (res.status !== 201) return alert('添加图书失败!')
            getBookList() // 4. 添加成功后,刷新图书列表
            $('input:text').val('') // 5. 清空文本框内容
        }
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    8.6 整体代码:

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>Document</title>
      <link rel="stylesheet" href="./123/bootstrap.css" />
      <script src="./123/jquery.js"></script>
    </head>
    
    <body style="padding: 15px;">
      <!-- 添加图书的Panel面板 -->
      <div class="panel panel-primary">
        <div class="panel-heading">
          <h3 class="panel-title">添加新图书</h3>
        </div>
        <div class="panel-body form-inline">
    
          <div class="input-group">
            <div class="input-group-addon">书名</div>
            <input type="text" class="form-control" id="iptBookname" placeholder="请输入书名">
          </div>
    
          <div class="input-group">
            <div class="input-group-addon">作者</div>
            <input type="text" class="form-control" id="iptAuthor" placeholder="请输入作者">
          </div>
    
          <div class="input-group">
            <div class="input-group-addon">出版社</div>
            <input type="text" class="form-control" id="iptPublisher" placeholder="请输入出版社">
          </div>
    
          <button id="btnAdd" class="btn btn-primary">添加</button>
    
        </div>
      </div>
    
    
      <!-- 图书的表格 -->
      <table class="table table-bordered table-hover">
        <thead>
          <tr>
            <th>Id</th>
            <th>书名</th>
            <th>作者</th>
            <th>出版社</th>
            <th>操作</th>
          </tr> 
        </thead>
        <tbody id="tb"></tbody>
      </table>
    
      <script>
        $(function () {
          // 获取图书列表数据
          function getBookList() {
            $.get('http://www.liulongbin.top:3006/api/getbooks', function (res) {
              //先验证获取数据是否成功
              if (res.status !== 200) return alert('获取数据失败!')
    
              var rows = [] //声明一个数组,用来存储获取的数据
              //遍历数组
              $.each(res.data, function (i, item) {
                rows.push('<tr><td>' + item.id + '</td><td>' + item.bookname + '</td><td>' + item.author + '</td><td>' + item.publisher + '</td><td><a href="javascript:;" class="del" data-id="' + item.id + '">删除</a></td></tr>')
              })
              $('#tb').empty().append(rows.join(''))
            })
          }
    
          getBookList()
    
          /* $('.del').on('click', function () {
            console.log('ok')
          }) */
    
          // 通过代理的方式为动态添加的元素绑定点击事件,用tbody来代替del,为删除按钮绑定点击事件
          $('tbody').on('click', '.del', function () {
            //通过获取id值来获取每一行图书的信息
            // data-id即为每一行图书设置的自定义属性
            var id = $(this).attr('data-id')
            $.get('http://www.liulongbin.top:3006/api/delbook', { id: id }, function (res) {
              if (res.status !== 200) return alert('删除图书失败!')
              getBookList()
            })
          })
    
          $('#btnAdd').on('click', function () {
            var bookname = $('#iptBookname').val().trim()
            var author = $('#iptAuthor').val().trim()
            var publisher = $('#iptPublisher').val().trim()
            if (bookname.length <= 0 || author.length <= 0 || publisher.length <= 0) {
              return alert('请填写完整的图书信息!')
            }
    
            $.post('http://www.liulongbin.top:3006/api/addbook', { bookname: bookname, author: author, publisher: publisher }, function (res) {
              if (res.status !== 201) return alert('添加图书失败!')
              getBookList()
              $('#iptBookname').val('')
              $('#iptAuthor').val('')
              $('#iptPublisher').val('')
            })
          })
        })
      </script>
    
    </body>
    
    </html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111

    运行结果:
    在这里插入图片描述

  • 相关阅读:
    (Matalb时序预测)GWO-BP灰狼算法优化BP神经网络的多维时序回归预测
    【MySQL】数据库——库操作
    K8S获取连接token
    2023年中国涂料用环氧树脂需求量及行业市场规模前景分析[图]
    DSPE-PEG-Biotin,385437-57-0,磷脂-聚乙二醇-生物素用于生物分子的检测和纯化
    【Linux】第十五章 多线程(线程池)
    软考知识点---10数据库基础
    数据结构与算法-快速排序第一趟结果
    MQTT----下(注意事项)
    【Kubernetes】深入了解 Kubernetes:现代容器编排与管理平台
  • 原文地址:https://blog.csdn.net/qq_56897195/article/details/125629392