• ajax笔记二


    目录

    一 jQuery中的Ajax

    二 接口

    三 练习

    (1)图书管理案例

    ​编辑

    ​编辑

    (2)聊天机器人

    四 form

    (1)介绍

    (2)表单标签的属性

    (3)表单的同步提交及缺点

    (4)通过Ajax提交表单数据

     五 评论列表

    (1)基于bootstrap渲染评论列表

     (2)获取并渲染评论列表

    (3) 实现发表评论的功能


    一 jQuery中的Ajax

    浏览器中提供的XML HttpRequest用法比较复杂,所以jQuery对XMLHttpRequest进行了封装,提供了一系列Ajax相关的函数,极大地降低了Ajax的使用难度。

    写代码时要引入jquery.js
    jQuery中发起Ajax请求最常用的三个方法如下:
    (1)$.get (url, [data], [callback]):

           参数名                参数类型                               是否必选                   说明
             url                        string                                      是                   要请求的资源地址
            data                     object                                      否               请求资源期间要携带的参数
          callback                function                                    否                请求成功时的回调函数

    (2)$.post (url, [data], [callback]):

         参数名                参数类型                               是否必选                  说明
            url                        string                                      是                提交数据的地址
           data                     object                                      否                 要提交的数据
          callback                function                                    否             数据提交成功时的回调函数
    (3)$.ajax()

    1. $.ajax({
    2. type: ''//请求的方式,例如GET或POST
    3. url :' '//请求的URL地址
    4. data: { },// 这次请求要携带的数据
    5. success: function(res) {} // 请求成功之后的回调函数
    6. })

    二 接口

    (1)介绍

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

    使用PostMan测试GET接口:
    1. 选择请求的方式
    2.填写请求的URL 地址
    3.填写请求的参数
    4.点击Send按钮发起GET请求
    5.查看服务器响应的结果
     

    使用PostMan测试POST接口

    步骤: 
    1.选择请求的方式
    2.填写请求的URL 地址
    3.选择Body面板并勾选数据格式
    4.填写要发送到服务器的数据
    5.点击Send按钮发起POST请求

    (2)接口文档

    定义:接口的说明文档,是我们调用接口的依据

    一个合格的接口文档,应该包含以下6项内容,从而为接口的调用提供依据:
    1. 接口名称:用来标识各个接口的简单说明,如登录接口,获取图书列表接口等。
    2.接口URL: 接口的调用地址。
    3.调用方式: 接口的调用方式,如GET或POST.
    4.参数格式: 接口需要传递的参数,每个参数必须包含参数名称、参数类型、是否必选、参数说明这4项内容。
    5.响应格式: 接口的返回值的详细描述,一般包含数据名称、数据类型、说明3项内容。
    6.返回示例 (可选) : 通过对象的形式, .例举服务器返回数据的结构。

     

    三 练习

    (1)图书管理案例

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

    返回示例  

     

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
    7. <title>Documenttitle>
    8. <link rel="stylesheet" href="bootstrap.css" />
    9. <script src="jquery.js">script>
    10. head>
    11. <body style="padding: 15px;">
    12. <div class="panel panel-primary">
    13. <div class="panel-heading">
    14. <h3 class="panel-title">添加新图书h3>
    15. div>
    16. <div class="panel-body form-inline">
    17. <div class="input-group">
    18. <div class="input-group-addon">书名div>
    19. <input type="text" class="form-control" id="iptBookname" placeholder="请输入书名">
    20. div>
    21. <div class="input-group">
    22. <div class="input-group-addon">作者div>
    23. <input type="text" class="form-control" id="iptAuthor" placeholder="请输入作者">
    24. div>
    25. <div class="input-group">
    26. <div class="input-group-addon">出版社div>
    27. <input type="text" class="form-control" id="iptPublisher" placeholder="请输入出版社">
    28. div>
    29. <button id="btnAdd" class="btn btn-primary">添加button>
    30. div>
    31. div>
    32. <table class="table table-bordered table-hover">
    33. <thead>
    34. <tr>
    35. <th>Idth>
    36. <th>书名th>
    37. <th>作者th>
    38. <th>出版社th>
    39. <th>操作th>
    40. tr>
    41. thead>
    42. <tbody id="tb">tbody>
    43. table>
    44. <script>
    45. $(function () {
    46. // 渲染图书列表数据
    47. function getBookList() {
    48. $.get('http://www.liulongbin.top:3006/api/getbooks', function (res) {
    49. if (res.status !== 200) return alert('获取数据失败!')
    50. var rows = []
    51. $.each(res.data, function (i, item) {
    52. rows.push('' + item.id + '' + item.bookname + '' + item.author + '' + item.publisher + 'id + '">删除')
    53. })
    54. //渲染表格结构
    55. $('#tb').empty().append(rows.join(''))
    56. })
    57. }
    58. getBookList()
    59. //删除图书
    60. /*
    61. //那些是后期被通过dom操作判断绑定上去的元素绑定的无法通过这种方式点击事件
    62. $('.del').on('click', function () {
    63. console.log('ok')
    64. }) */
    65. // 通过代理的方式为动态添加的元素绑定点击事件
    66. //tbody代理.del
    67. $('tbody').on('click', '.del', function () {
    68. var id = $(this).attr('data-id')
    69. $.get('http://www.liulongbin.top:3006/api/delbook', { id: id }, function (res) {
    70. if (res.status !== 200) return alert('删除图书失败!')
    71. //刷新列表
    72. getBookList()
    73. })
    74. })
    75. //添加图书
    76. $('#btnAdd').on('click', function () {
    77. var bookname = $('#iptBookname').val().trim()
    78. var author = $('#iptAuthor').val().trim()
    79. var publisher = $('#iptPublisher').val().trim()
    80. if (bookname.length <= 0 || author.length <= 0 || publisher.length <= 0) {
    81. return alert('请填写完整的图书信息!')
    82. }
    83. $.post('http://www.liulongbin.top:3006/api/addbook', { bookname: bookname, author: author, publisher: publisher }, function (res) {
    84. if (res.status !== 201) return alert('添加图书失败!')
    85. getBookList()
    86. //清空
    87. $('#iptBookname').val('')
    88. $('#iptAuthor').val('')
    89. $('#iptPublisher').val('')
    90. })
    91. })
    92. })
    93. script>
    94. body>
    95. html>

    实现效果: 

     

    (2)聊天机器人

    1)梳理案例的代码结构
    ①梳理页面的UI布局
    ②将业务代码抽离到chat.js中
    ③了解resetui()函数的作用:向聊天区域中追加一些聊天内容后调用此函数就能让滚动条会到最底部的位置

    2)将用户输入的内容渲染到聊天窗口

    1. // 为发送按钮绑定鼠标点击事件
    2. $('#btnSend').on('click', function () {
    3. //获取用户输入的内容
    4. var text = $('#ipt').val().trim()
    5. //判断用户输入的内容是否为空
    6. if (text.length <= 0) {
    7. return $('#ipt').val('')
    8. }
    9. // 如果用户输入了聊天内容,则将聊天内容追加到页面上显示
    10. $('#talk_list').append('
    11. ' + text + '
    12. ')
  • // 清空输入框
  • $('#ipt').val('')
  • // 重置滚动条的位置
  • resetui()
  • })
  • 3)发起请求获取聊天消息

    1. // 获取聊天机器人发送回来的消息
    2. function getMsg(text) {
    3. $.ajax({
    4. method: 'GET',
    5. url: 'http://ajax.frontend.itheima.net:3006/api/robot',
    6. data: {
    7. spoken: text
    8. },
    9. success: function (res) {
    10. // console.log(res)
    11. if (res.message === 'success') {
    12. // 接收聊天消息
    13. var msg = res.data.info.text
    14. //将聊天消息渲染到页面上
    15. $('#talk_list').append('
    16. ' + msg + '
    17. ')
  • // 重置滚动条的位置
  • resetui()
  • }}
  • })
  • 4)将机器人的聊天内容转为语音

    1. // 把文字转化为语音进行播放
    2. function getVoice(text) {
    3. $.ajax({
    4. method: 'GET',
    5. url: 'http://ajax.frontend.itheima.net:3006/api/synthesize',
    6. data: {
    7. text: text
    8. },
    9. success: function (res) {
    10. //如果请求成功,则res.voiceUrl 是服务器返回的音频URL地址
    11. if (res.status === 200) {
    12. // 播放语音
    13. $('#voice').attr('src', res.voiceUrl)
    14. }
    15. }
    16. })
    17. }
    1. <audio src="" id="voice" autoplay style="display: none;">audio>

    5)使用回车发送消息

    1. //让文本输入框响应回车事件后,提交消息
    2. $('#ipt').on('keyup', function (e) {
    3. // e.keyCode可以获取到当前按键的编码
    4. if (e. keyCode === 13) {
    5. //调用按钮元素的click 函数, 可以通过编程的形式触发按钮的点击事件
    6. $('#btnSend').click ()
    7. })

    四 form

    (1)介绍

    表单由三个基本部分组成:
    ●表单标签
    ●表单域:包含了文本框、密码框、隐藏域、多行文本框、复选框、单选框、下拉选择框和文件 上传框等。
    ●表单按钮

    (2)表单标签的属性

    1)action

    action属性用来规定当提交表单时,向何处发送表单数据
    action属性的值应该是后端提供的一个URL地址,这个URL地址专门负责接收表单提交过来的数据。

    表单在未指定action属性值的情况下,action 的默认值为当前页面的URL地址。

    2)target

    target属性用来规定在何处打开action URL。
    它的可选值有5个,默认情况下,target 的值是_ self, 表示在相同的框架中打开action URL.

    method属性用来规定以何种方式把表单数据提交到action URL。
    它的可选值有两个,分别是get和post.
    默认情况下,method的值为get,表示通过URL地址的形式,把表单数据提交到action URL。
    注意:
    get方式适合用来提交少量的、简单的数据。
    post方式适合用来提交大量的、复杂的、或包含文件上传的数据。

     3)enctype

    enctype属性用来规定在发送表单数据之前如何对数据进行编码。
    它的可选值有三个,默认情况下,enctype 的值为application/x www-form-urlencoded,表示在发送前编码所有的字符。

     注意:
    在涉及到文件.上传的操作时,必须将enctype的值设置为multipart/form-data
    如果表单的提交不涉及到文件.上传操作,则直接将enctype的值设置为application/x-www-form-urlencoded即可!

    (3)表单的同步提交及缺点

    定义:通过点击submit按钮,触发表单提交的操作,从而使页面跳转到action URL的行为,叫做表单的同步提交。
    如果使用表单提交数据,则会导致以下两个问题:
    ①页面会发生跳转
    ②页面之前的状态和数据会丢失
    解决方案:表单只负责采集数据,Ajax 负责将数据提交到服务器。

    (4)通过Ajax提交表单数据

      1)监听表单提交事件

    1. $('#form1').submit (function(e) {
    2. alert('监听到了表单的提交事件')
    3. })
    4. $('#form1').on('submit', function(e) {
    5. alert('监听到了表单的提交事件')
    6. })

    2)阻止表单默认提交行为
    当监听到表单的提交事件以后,可以调用事件对象的event.preventDefault()函数,来阻止表单的提交和页面的跳转,示例代码如下: 

    1. $('#form1').submit(function(e) {
    2. //阻止表单的提交和页面的跳转
    3. e.preventDefault ()
    4. })
    5. $('#form1').on('submit', function(e) {
    6. //阻止表单的提交和页面的跳转
    7. e.preventDefault ()
    8. }

    3)快速获取表单中的数据

    为了简化表单中数据的获取操作, jQuery 提供了serialize()函数,其语法格式如下:
    $(selector).serialize ()

    注意:在使用serialize()函数快速获取表单数据时,必须为每个表单元素添加name属性!

     五 评论列表

    (1)基于bootstrap渲染评论列表

    主页面:

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
    7. <title>Documenttitle>
    8. <link rel="stylesheet" href="./lib/bootstrap.css" />
    9. head>
    10. <body style="padding: 15px;">
    11. <div class="panel panel-primary">
    12. <div class="panel-heading">
    13. <h3 class="panel-title">发表评论h3>
    14. div>
    15. <form class="panel-body" id="formAddCmt">
    16. <div>评论人:div>
    17. <input type="text" class="form-control" name="username" autocomplete="off" />
    18. <div>评论内容:div>
    19. <textarea class="form-control" name="content">textarea>
    20. <button type="submit" class="btn btn-primary">发表评论button>
    21. form>
    22. div>
    23. <ul class="list-group" id="cmt-list">
    24. <li class="list-group-item">
    25. <span class="badge" style="background-color: #F0AD4E;">评论时间:span>
    26. <span class="badge" style="background-color: #5BC0DE;">评论人:span>
    27. Item 1
    28. li>
    29. ul>
    30. body>
    31. html>

     (2)获取并渲染评论列表

     

     在主页面添加

    1. <script src="./lib/jquery.js">script>
    2. <script src="./js/cmt.js">script>

    cmt.js页面添加如下代码获取评论列表

    1. function getCommentList() {
    2. $.ajax({
    3. method: 'GET',
    4. url: 'http://www.liulongbin.top:3006/api/cmtlist',
    5. success: function (res) {
    6. if (res.status !== 200) return alert('获取评论列表失败!')
    7. var rows = []
    8. $.each(res.data, function (i, item) {//获取评论列表
    9. var str = '
    10. 评论时间:' + item.time + '评论人:' + item.username + '' + item.content + '
    11. '
  • rows.push(str)
  • })
  • $('#cmt-list').empty().append(rows.join(''))
  • }
  • })
  • }
  • (3) 实现发表评论的功能

     

     cmt.js页面添加如下代码实现发表评论功能:

    1. $(function () {
    2. $('#formAddCmt').submit(function (e) {
    3. //组织表单默认提交行为
    4. e.preventDefault()
    5. //data:要发送到服务器的数据
    6. var data = $(this).serialize()
    7. $.post('http://www.liulongbin.top:3006/api/addcmt', data, function (res) {
    8. if (res.status !== 201) {
    9. return alert('发表评论失败!')
    10. }
    11. //刷新评论列表
    12. getCommentList()
    13. //清空表单里的信息
    14. //jquery对象($('#formAddCmt'))转化为dom对象只用调用[0]
    15. $('#formAddCmt')[0].reset()
    16. })
    17. })
    18. })

  • 相关阅读:
    敏感性分析一览
    权限系统中的数据权限就该这么设计,yyds
    深度神经网络
    Hbase
    云计算-Linux-小综合实验答案
    检测图像的圆形 检测直线 Hough变换检测直线 圆形检测 圆心半径检测 -matlab
    PHP指的是什么 PhP程序语言基本注意事项
    vue/cli不同版本差异
    C# Solidworks二次开发:枚举应用实战(第三讲)
    什么是线程死锁?死锁如何产生?如何避免线程死锁?
  • 原文地址:https://blog.csdn.net/qq_62401904/article/details/126340881