ajax 01

ajax 01

相关概念

关于网站

**什么是网站?**就是一堆网页 html css js
**程序员开发的网站如何被人看到?**需要把网站的代码放到【服务器】上,用户可以通过网址访问页面
**什么是服务器?**就是计算机用于提供网站服务

客户端-服务器交互模型

网站开发好之后,需要上线(把代码上传到服务器上),客户端(浏览器)需要通过请求的方式访问服务器中的网页,服务器收到请求后,把网页返回给浏览器,然后浏览器把页面呈现出来

客户端(浏览器)发送请求到服务器
服务器返回网页给浏览器用于展示

URL地址格式

URL地址的作用:可以唯一标识服务器中的某个资源

URL地址由3个部分组成:
1.协议:客户端与服务器之间的通讯协议
2.域名:存有该资源的服务器名称,通过他可以找到互联网中对应那台计算机
3.路径:资源在服务器上具体存在地址:告诉客户端文件的地址

服务端资源类型

服务器中所有的可以通过URL地址访问的内容都称之为【资源】--------------------->最重要的是数据资源
每一个URL地址啊对应服务器中的一个资源

浏览器调试工具基本用法

借助浏览器的调试工具,可以直观看到浏览器发送的请求到底返回了什么

Ajax概述

Ajax可以解决什么问题

传统的网站访问方式:客户端发送请求,服务器返回网页,浏览器展示网页
如果长时间服务器没有返回内容,浏览器只能等待(阻塞:白屏)用户体验较差--------->Ajax为解决这个问题

Ajax是什么

Ajax是一种改善浏览网页用户体验的一种技术,通过不阻塞(异步)浏览器发送请求的当时改善体验

Ajax应用场景

1.用户名服务器验证
2.搜索智能提示
3.数据分页显示

基于jQuery的Ajax用法

发送get请求

$.get 主要用于像服务器查询资源

// 需求:点击按钮发送请求到服务器,获取服务器返回的资源,然后更新页面
$('#btn').click(function () {
    // 1、发送一个请求给服务器
    // $.get的方法参数
    // 参数一表示请求的url地址
    // 参数二表示回调函数,后端返回数据后自动触发,通过形参获取服务器返回的结果
    $.get('http://www.liulongbin.top:3006/api/getbooks', function (result) {
        // 2、把返回的数据展示到页面
        $('#result').html(result.msg)
    })
})

$.get请求传递请求参数

// get 请求如何传递参数
// 1、给按钮绑定单击事件
$('#btn').click(function () {
  // 发送get请求时如何传递参数(查询条件)
  $('#btn').click(function () {
    // 1、发送一个请求给服务器
    // $.get的方法参数
    // 参数一表示请求的url地址
    // 参数二表示回调函数,后端返回数据后自动触发,通过形参获取服务器返回的结果
    // url地址中?之后的内容称之为查询字符串
    // 查询字符串的格式 ?key1=value1&key2=value2
    $.get('http://www.liulongbin.top:3006/api/getbooks?id=74&author=1', function (result) {
      // 2、把返回的数据展示到页面
      $('#result').html(result.msg)
    })
  })
  // ------------------------------------------------
    var id = 74
    var author = 1
    /*
      参数一:表示请求的url地址
      参数二:表示请求的get参数
      参数三:表示服务器返回成功的回调函数
    */
    $.get('http://www.liulongbin.top:3006/api/getbooks', {
        id: id,
        author: author
    },function (result) {
        // 2、把返回的数据展示到页面
        $('#result').html(result.msg)
    })
})

总结:

  1. $.get方式发送请求的主要目的,为了查询服务器的数据
  2. 查询数据时可以传递参数
    1. 自己拼接字符串方式,接到url地址?之后
    2. 基于$.get方法的参数二传递,参数类型是对象

注意:?之后的那部分参数内容称之为【查询字符串(请求参数)】

发送post请求

post请求的主要目的就是提交数据给服务器
post 提交的参数不会添加到url地址中,而是以【请求体】方式提交
// 发送post请求时如何传递参数(查询条件)

 $('#btn').click(function () {
    // 添加图书
    /*
      参数一表示请求的url地址
      参数二表示请求参数(提交给服务器的数据)
      参数三表示提交成功的回调
    */
    $.post('http://www.liulongbin.top:3006/api/addbook', {
      author: '施耐庵',
      bookname: '水浒传',
      publisher: '出版社'
    }, function (result) {
      $('#result').html(result.msg)
    })
  })

总结:

  1. post请求的目的是为了向服务器提交数据
  2. 通过$.post方法的参数二进行提交数据
  3. post提交的数据不可以在url地址中看到,但是在Headers的最底部可以看到(请求体)

$.ajax方法用法

$.ajax方法

  • type 请求方式 (GET 和 POST),不区分大小写
  • url 请求地址
  • data 请求参数
  • success 服务器返回数据成功的回调函数
// 需求:通过$.ajax方法发送请求
// 1、给按钮绑定单击事件
$('#btn').click(function () {
  // 向服务器发送请求
  $.ajax({
    // 请求方式
    type: 'get',
    // 请求url地址
    url: 'http://www.liulongbin.top:3006/api/getbooks',
    // 传递参数
    // data: {
    //   id: 1,
    //   autor: '吴承恩'
    // },
    // 成功获取服务器端返回数据的回调函数
    success: function (res) {
      $('#result').html(res.data.length)
    }
  })
  // -------------------------------------
  // $.ajax({
  //   // 请求方式
  //   type: 'post',
  //   // 请求url地址
  //   url: 'http://www.liulongbin.top:3006/api/addbook',
  //   // 传递参数
  //   data: {
  //     author: '吴军',
  //     bookname: '浪潮之巅',
  //     publisher: '出版社'
  //   },
  //   // 成功获取服务器端返回数据的回调函数
  //   success: function (res) {
  //     $('#result').html(res.msg)
  //   }
  // })
})

总结

  1. $.ajax既可以发送get请求,也可以发送post请求
  2. $.ajax 两者皆可
    1. $.get 专门用于发送get请求
    2. $.post 专门用于发送post请求

get和post的区别

get主要目的获取服务器的资源,可以传递参数(作为查询条件)

  • get请求参数需要用url地址进行传递(?之后的查询字符串 key=value&key1=value1)
  • get请求传参有限制:8000个字符
    post主要目的向服务器提交数据
  • post请求参数以请求体方式进行传递,不会添加到URL地址
  • 如果要提交的数据量比较大,需要使用post
    总结:
  1. get主要目的是查询数据,但是url地址传递的数据量有限制
  2. post主要目的是提交数据,具体提交的数据量由后端决定,一般是几M(对于提交表单来说,完全够用)
  3. 实际上,前端发送请求时,用get或者post谁说了算?后端

后端接口

什么是接口

对于Ajax来说,接口就是指URL地址

接口的核心信息:
请求地址:URL地址
请求方式:get和post
请求参数:get方式通过URL传参,post方式通过请求体传参
响应结果数据:服务端返回的数据

图书管理案例

前端对接后端的流程:
1.处理前端事件监听
2.调用后端接口并获取返回结果
3.处理接口返回的结果
1)查询(客户端渲染:把数据拼接到HTML标签里面)
2)增删改(判断操作成功与否的状态,从而进行后续操作)

页面基本布局

<!-- 添加图书的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 src="./js/jquery-3.5.1.min.js"></script>

获取图书列表数据

 //*********************************************调用接口,将图书数据显示在页面
        //封装函数
        function getBook() {
            //调用接口  请求数据库中的数据
            $.get('http://www.liulongbin.top:3006/api/getbooks', function (res) {
                //需要先判断一下数据是否存在status
                if (res.status === 200) {
                    //数据存在  将数据渲染到页面
                    //利用拼接字符串
                    let Tag = ''
                    //循环遍历数据  将数据拼接成字符串渲染到页面
                    res.data.forEach(item => {
                        Tag += `<tr>
                                <th>${item.id}</th>
                                <th>${item.bookname}</th>
                                <th>${item.author}</th>
                                <th>${item.publisher}</th>
                                <th ><a href="#" class='del' data-index='${item.id}'>删除</a></th>
                               </tr>`
                    });
                    //将数据重新渲染到页面
                    $('#tb').html(Tag)
                }
            })

        }
        // 调用函数
        getBook()
  
列表渲染数据
 let Tag = ''
                    //循环遍历数据  将数据拼接成字符串渲染到页面
                    res.data.forEach(item => {
                        Tag += `<tr>
                                <th>${item.id}</th>
                                <th>${item.bookname}</th>
                                <th>${item.author}</th>
                                <th>${item.publisher}</th>
                                <th ><a href="#" class='del' data-index='${item.id}'>删除</a></th>
                               </tr>`
                    });
                    //将数据重新渲染到页面
                    $('#tb').html(Tag)

添加图书

  • 提交表单事件处理
  • 获取表单数据
  • 调用接口添加图书
  • 服务器返回一个添加成功的状态
  • 客户端判断状态并且刷新列表并且清空表单
 //*******************************************************添加图书
        //1.添加监听事件
        $('#btnAdd').on('click', function () {
            // 2.获取输入框的值  获取数据
            let bookname = $('#iptBookname').val()
            let author = $('#iptAuthor').val()
            let publisher = $('#iptPublisher').val()
            //*******************************************************表单验证
            if (!bookname || !author || !publisher) {
                alert('输入的内容不能为空')
                // 终止函数
                return
            }
            // 3.调用接口,把获取到的数据添加到数据库
            $.post('http://www.liulongbin.top:3006/api/addbook', {
                bookname: bookname,
                author: author,
                publisher: publisher
            }, function () {
                //此时数据库已经把数据添加成功
                //调用函数,重新加载,渲染到页面
                getBook()
                //输入框数据置空
                $('#iptBookname').val('')
                $('#iptAuthor').val('')
                $('#iptPublisher').val('')
            })
        })
表单验证
 if (!bookname) {
                alert('图书名称不能为空')
                return
            }
            if (!author) {
                alert('图书作者不能为空')
                return
            }
            if (!publisher) {
                alert('图书出版社不能为空')
                return
            }

删除图书

  • 删除图书按钮事件处理
    • 通过事件委托方式绑定事件
    • (‘tbody’).on(‘click’, ‘a’, function () {})
  • 根据图书ID调用后台接口删除图书
    • 删除图书接口路径 api/delbook
 //***********************************************删除图书
        //使用事件委托   找父级
        //  1.添加监听事件
        $('#tb').on('click', '.del', function () {
            //  2.需要找每个删除按钮对应的图书id   自定义属性
            let index = $(this).data('index')
            // 3.点击删除按钮需要判断是否需要删除 confirm  返回值是Boolean类型的true和false
            let flag = confirm('确定要删除吗?')
            // 4.调用接口  通过数据库来删除对应的数据  用get方法
            $.get('http://www.liulongbin.top:3006/api/delbook', {
                id: index
            }, function (res) {
                //此时数据库已经删除成功
                // 判断一下删除成功与否 成功需要重新加载页面  confirm是删除成功
                if (confirm) {
                    //重新加载一下页面  调用函数
                    getBook()
                } else {
                    alert(res.msg)
                }

            })

        })
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值