数据库实训第二天笔记,jQuery的补充和ajax的学习和案例

这篇博客介绍了jQuery的事件处理、DOM操作,特别是事件委托和属性设置,并深入讲解了AJAX的基础概念,包括$.get()、$.post()和$.ajax()的使用。此外,还提供了图书管理系统接口的调用示例,涵盖了GET和POST请求。
摘要由CSDN通过智能技术生成

jQuery补充

  • jQuery 事件

dom:

<ul>
        <li class="li1">li li</li>
        <li class="li2">li li</li>
        <li class="li3">li li</li>
</ul>
<button>按钮</button>
<a href="http://baidu.com" index="1">aa</a>

​ 1、事件基础写法

$('button').click(function(){
	console.log('我是按钮')
})

​ 2、事件的升级写法(类似js)

// on 的第一个参数是:事件名
$('button').on('click',function(){
    console.log('我是一个按钮')
})

​ 3、事件的升级写法

  • 第二个参数(事件委托,事件委托适用场景1)//网页的设计很多很多的使用事件委托,因为网页是动态生成的。
// 需求:给 li 的子元素绑定单独的事件,需要先绑定父级
// 第二个参数:子元素的选择器(类名、id、标签)
// 这种写法叫:事件委托。
// 就是将事件交给父级,交父级之后,点击子元素,由父级分配这个事件(点击谁)
// 事件委托适用场景1:想给每一个子元素都绑定事件
$('ul').on('click','li',function(){
	console.log($(this))
})
  • 不委托写法
// 给每个事件绑定
        $('ul li').click(function(){
            console.log($(this))
        })
  • 事件委托适用场景2
	// 如果是动态添加的 li ,通过 click 方法是不能给动态元素绑定(传统写法)
        $('ul li').click(function(){
            console.log($(this))
        })
        
        //  动态添加的元素,只有使用事件委托的方式才能绑定事件
        $('ul').on('click','li',function(){
            console.log($(this))
        })

        //append 就是向某个元素中追加内容
        $('ul').append('<li> 我是追加的 li</li>')
  • jQuery 属性操作

设置或获取元素固有属性值 prop()。

dom:

<a href="http://baidu.com" index="1">aa</a>

​ 1、获取元素的固有属性(元素本身自带的属性)

console.log($('a').prop('href'))

​ 2、给元素固定的苏醒设置罪行的属性值

// 第一个参数:需要设置的属性
// 第二个参数:最新的属性值
$('a').prop('href','http://fanyi.baidu.com')

​ 3、 获取自定义的属性

console.log($('a').attr('index'))

​ 4、给自定义属性设置属性值

$('a').attr('index',2)
  • 循环、遍历

dom:

<div>盒子1</div>
<div>盒子2</div>
<div>盒子3</div>

script中的遍历:

// 之前的隐式迭代(同时获取同名,同类型的标签,对同一元素做同一操作)
// $('div').css('background','skyblue')

​ 需求:给同一类元素做不同操作,就需要遍历:

// .each 就是 jQuery中的遍历方法
// .each 接受一个函数作为参数,函数有两个参数
// 第一个参数,索引。第二个参数,js中的DOM对象

//数组定义颜色
const arr =['skyblue','orange','pink']

$('div').each(function(index,domEle){
    // console.log(arr[index]) // 通过索引获取arr中的每一个颜色

    // domEle 是DOM对象,不能直接调用jQuery对象,需要先转换成jQuery对象
    $(domEle).css('background',arr[index])
})
  • 对数组的遍历
var heroList=['亚索','阿狸','盖伦']

// 主要用来对数据进行遍历:数组
// 第一个参数:需要遍历的数据
// 第二个参数:函数,函数中也有俩个参数
//   1、索引:index
//   2、遍历的数据的每一项:item、element
$.each(heroList,function(index,item) {
	console.log(item)
})
var object={
    name: '亚索',
    age: 10
}

// 对对象进行遍历
// 函数的第一个参数:对象的属性
// 函数的第二个参数:对象的属性值
$.each(object,function(index,item) {
    // 如果遍历的是对象,index 打印出来的时序性
    console.log(index)
    // item 是属性值
    console.log(item)
})
        

模板字符串

字符串写法存在的问题:

1、 字符串拼接很犯错
2、字符串拼接没有换行,不方便阅读

var str='亚索'
console.log('<li>'+ str + '</li><li>' + str +'</li>')

解决方案:模板字符串 (就是加强型的字符串)

// 模板字符串使用的是反引号 (键盘1左边的按键)
var str=`亚索`

// 在模板字符串中如何使用变量 ${变量}
console.log(`
<li>
	亚索
	${str}
</li>`)

AJAX

  • 什么是AJAX?

    Ajax 的全称是 Asynchronous Javascript And XML (异步 JavaScript 和 XML ).
    通俗的理解:在网页中利用 XMLHttpRequest 对象和服务器进行数据交互的方式,就是 Ajax。

  • jQuery 中的 AJAX

    jQuery 中发起Ajax 请求最常用的三个方法如下:

    ​ $.get)

    ​ $.post()

    ​ $.ajax()

    jQuery 中 $.get()函数的功能单一,专门用来发起get 请求,从而将服务器上的资源请求到客户端来进行使用。

$(function() {
// $.get() 方法,用来想服务器请求(获取)数据资源

// $.get()有三个参数
// 第一个参数:请求的资源地址
// 第二个参数:需要传递给服务器的资源,非必填
// 第三个参数:函数,函数里有一个参数
// 1、请求的资源地址返回的数据
$.get('http://www.liulongbin.top:3006/api/getbooks',function (res) {
	console.log(res)
    })
})

​ post使用方法,使用 HTTP POST 请求从服务器加载数据:

$("button").click(function(){    $.post("demo_test.html",function(data,status){        alert("Data: " + data + "nStatus: " + status);    });});

​ 发送一个 HTTP GET 请求到页面并取回结果:

$("button").click(function(){
    $.get("/try/ajax/demo_test.php",function(data,status){
        alert("数据: " + data + "\n状态: " + status);
    });
});
  • 接口

​ 使用 Ajax 请求数据时,被请求的URL地址,就叫做数据接口〈简称接口)。同时,每个接口必须有请求方式。

  • 通过GET方式请求接口的过程

在这里插入图片描述

  • 通过POST方式请求接口过程

在这里插入图片描述

  • ​ 接口文档

​ 顾名思义就是接口的说明文档,它是我们调用接口的依据。好的接口文档包含了对候口URL,参数以及输出内容的说明,我们参照接口文档就能方便的知道接口的作用,以及接口如何进行调用。

  • 接口文档组成成分

    1.接口名称:

    ​ 用来标识各个接口的简单说明,如登录接口,获取图书列表接口等。接口URL:接口的调用地址。
    3.调用方式:

    ​ 接口的调用方式,如GET或 POST.
    4.参数格式:

    ​ 接口需要传递的参数,每个参数必须包含参数名称、参数类型、是否必选、参数说明这4项内容。5.响应格式:接口的返回值的详细描述,一般包含数据名称、数据类型、说明3项内容。
    6.返回示例(可选)︰

    ​ 通过对象的形式,例举服务器返回数据的结构。

  • 图书管理系统案例

  • 接口:/* */中的内容即为真实接口文档

    /*

    请求的根路径

    图书列表

    • 接口URL: http://www.liulongbin.top:3006/api/getbooks
    • 调用方式: GET
    • 参数格式:
    参数名称参数类型是否必选参数说明
    idNumber图书Id
    booknameString图书名称
    authorString作者
    publisherString出版社
    • 响应格式:
    数据名称数据类型说明
    statusNumber200 成功;500 失败;
    msgString对 status 字段的详细说明
    dataArray图书列表
    +idNumber图书Id
    +booknameString图书名称
    +authorString作者
    +publisherString出版社
    • 返回示例:
    {
      "status": 200,
      "msg": "获取图书列表成功",
      "data": [
        { "id": 1, "bookname": "西游记", "author": "吴承恩", "publisher": "北京图书出版社" },
        { "id": 2, "bookname": "红楼梦", "author": "曹雪芹", "publisher": "上海图书出版社" },
        { "id": 3, "bookname": "三国演义", "author": "罗贯中", "publisher": "北京图书出版社" }
      ]
    }
    
    

    添加图书

    • 接口URL: http://www.liulongbin.top:3006/api/addbook
    • 调用方式: POST
    • 参数格式:
    参数名称参数类型是否必选参数说明
    booknameString图书名称
    authorString作者
    publisherString出版社
    • 响应格式:
    数据名称数据类型说明
    statusNumber201 添加成功;500 添加失败;
    msgString对 status 字段的详细说明
    • 返回示例:
    {
        "status": 201,
        "msg": "添加图书成功"
    }
    

    删除图书

    • 接口URL: http://www.liulongbin.top:3006/api/delbook
    • 调用方式: GET
    • 参数格式:
    参数名称参数类型是否必选参数说明
    idNumber图书Id
    • 响应格式:
    数据名称数据类型说明
    statusNumber200 删除成功;500 未指定要删除的图书Id;501 执行Sql报错;502 要删除的图书不存在;
    msgString对 status 字段的详细说明
    • 返回示例:
    {
        "status": 200,
        "msg": "删除图书成功!"
    }
    

    */

完整案例实现:

<!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="./lib/bootstrap.css" />
</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">
      <!-- <tr>
        <td>1</td>
        <td>西游记</td>
        <td>吴承恩</td>
        <td>北京图书出版社</td>
        <td><a href="javascript:;" class="del" data-id="1">删除</a></td>
      </tr> -->
      
    </tbody>
  </table>
  <!-- 导入jQuery -->
  <script src="./js/jquery.js"></script>
  <script>
    $(function() {
      // 1、获取图书列表,渲染表格
      // 1、1 获取图书列表
      // $.get('http://www.liulongbin.top:3006/api/getbooks',function(res){
      //   console.log(res)
        
      // })

      // 为什么需要这段代码使用函数包裹?
      // 因为这段代码要经常使用,不使用函数,复用很麻烦
      function getBookList() {
        $.get('http://www.liulongbin.top:3006/api/getbooks',function(res){
        console.log(res.data)
        // 1、2 根据服务器响应的数据动态的渲染 tr,往 tbody 真难搞进行添加内容 (append)
        // 数据不够直接方法哦页面中,需要将数据填充到 tr 中
        // 有多少数据渲染多少 tr
        // 需要将返回的数据进行遍历,遍历以后,就能生成 n 个 tr
        // 我么需要将服务器返回的数据在动态的拼接到 tr 中
        $.each(res.data, function (index, item) {
          $('#tb').append(`
          <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>
        `)
        })
        
      })
      }
      getBookList()

      // 2、实现删除图书的功能
      // 2、1 给删除按钮绑定点击事件(因为列表是动态生成的,所以需要使用事件委托)
      $('#tb').on('click','.del',function() {

        // 2、2 获取当前删除项的 id (id 是唯一的)
        // 通过自定义属性的方式获取的 id ,在 a 标签上绑定了 data-id
        
        var id=$(this).attr('data-id')
        // 2、3 调用 ajax ,从服务器删除图书
        $.ajax({
          url: 'http://www.liulongbin.top:3006/api/delbook',
          type: 'GET',
          data: {
            id: id
          },
          success: function(res) {
            // 解决一个bug,append  =会一直进行追加,所以我们在获取最新数据之前,先将 他body清空
            $('#tb').html()
            // 删除成功后,重新获取数据,页面更新
            getBookList()
            // 删除功能,给用户弹窗提示
            alert(res.msg)
            
          }
          
        })
      })
      
      // 3、实现添加功能
      // 3、1 给添加按钮绑定点击事件
      $('#btnAdd').click(function() {
        // 3、2 获取图书名、作者、出版社
        var bookname=$('#iptBookname').val().trim()
        var author=$('#iptAuthor').val().trim()
        var publisher=$('#iptPublisher').val().trim()

        // 3、3 判断用户有没有输入图书名、作者和出版社,如果没有输入,不发请求
        if (bookname === '' || author === '' || publisher ===''){
          // return 能阻止继续运行
          return alert('请输入内容')
        }
        
        // 3、4 如果用户全部输入,提交,发送 ajax
        $.ajax({
          url: 'http://www.liulongbin.top:3006/api/addbook',
          type: 'POST',
          data: {
            bookname: bookname,
            author: author,
            publisher: publisher
          },
          success: function(res) {
            // 添加完成,刷新列表
            $('#tb').html()
            getBookList()

            // 提示添加结果
            alert(res.msg)
             // 3.5 清空文本框内容
             $('input:text').val('')
          }
        })
      })
      
    })
  </script>

</body>

</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小个子大大幻想

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值