• 前端AJAX入门到实战,学习前端框架前必会的(ajax+node.js+webpack+git)(一)


    写在开始

    学习完了前端三件套(HTML、CSS、JavaScript),

    在进行框架学习之前,

    我们还需要学习一些前置知识

    在当下,我们将初步进行“前后端交互”、感知“前端工程化”;

    在未来,它将伴随,并推进,整个的前端框架学习过程;

    ……

    我们继续跟随黑马网课,打下框架学习基础。本次学习的是:

    我是Capybara,您的前端学习伙伴,高级网课品鉴官,前端学习测评家

    不达目的不放弃,追逐理想的过程本身就难能可贵。

    AJAX入门——让数据“活”起来

    AJAX 概念和 axios 使用

    浏览器大家不陌生,服务器可以暂时理解为一台“提供数据”的电脑(一台二十四小时不关机的电脑)。

    我们可以在浏览器的网页中使用AJAX相关对应的代码,

    运行时,将会发出一次“请求”(让服务器满足我的要求——例如我要一份省份列表数据),

    数据不再直接嵌在代码里,而是从服务器返回,

    因此称数据“活”起来了。

    如何使用AJAX —— 可以使用封装好的axios库

    axios语法(使用到promise,后续讲解)

    需要使用到网络地址

    直接点击网址可在浏览器访问到,返回一个对象结构的json字符串

    message是提示信息,list才是省份列表数据

    打印返回结果result,result为一个对象,其中data属性为服务器返回真正数据。

    我们可以通过result.data.list拿到省份列表数据

    获取到数据后,数组转字符串(join方法)并插入换行符(
    ),

    便可展示到元素上

    实践代码:

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>AJAX概念和axios使用title>
    8. head>
    9. <body>
    10. <p class="my-p">p>
    11. <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js">script>
    12. <script>
    13. // 2. 使用axios函数
    14. axios({
    15. url: 'http://hmajax.itheima.net/api/province'
    16. }).then(result => {
    17. console.log(result)
    18. // 好习惯:多打印,确认属性名
    19. console.log(result.data.list)
    20. console.log(result.data.list.join('
      '
      ))
    21. // 把准备好省份列表,插入到页面
    22. document.querySelector('.my-p').innerHTML = result.data.list.join('
      '
      )
    23. })
    24. script>
    25. body>
    26. html>

    认识 URL

    为什么要认识URL呢?

    URL的组成:协议 + 域名 + 资源路径

    协议——规定了浏览器和服务器之间传输数据的格式

    域名——指出访问的是哪一台服务器电脑

    资源路径——标识访问文件在服务器电脑当中的具体位置

    尝试获取新闻列表数据

    URL 查询参数

    在axios中,查询参数写到params选项中

    不同pname,将返回不同数据:

    福建省

    辽宁省

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>查询参数title>
    8. head>
    9. <body>
    10. <p>p>
    11. <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js">script>
    12. <script>
    13. axios({
    14. url: 'http://hmajax.itheima.net/api/city',
    15. // 查询参数
    16. params: {
    17. pname: '辽宁省'
    18. }
    19. }).then(result => {
    20. console.log(result.data.list)
    21. document.querySelector('p').innerHTML = result.data.list.join('
      '
      )
    22. })
    23. script>
    24. body>
    25. html>

    日常常见的功能,比如设置籍贯,可以选择省份,城市,地区,三级选择。

    本案例选择省份和城市,展示地区。

    要携带多个参数

    对象增强写法(ES6):变量名和属性名相同时,可简写

    params: {

            pname,

            cname

    }

    实践代码:

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>案例_地区查询title>
    8. <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css">
    9. <style>
    10. :root {
    11. font-size: 15px;
    12. }
    13. body {
    14. padding-top: 15px;
    15. }
    16. style>
    17. head>
    18. <body>
    19. <div class="container">
    20. <form id="editForm" class="row">
    21. <div class="mb-3 col">
    22. <label class="form-label">省份名字label>
    23. <input type="text" value="北京" name="province" class="form-control province" placeholder="请输入省份名称" />
    24. div>
    25. <div class="mb-3 col">
    26. <label class="form-label">城市名字label>
    27. <input type="text" value="北京市" name="city" class="form-control city" placeholder="请输入城市名称" />
    28. div>
    29. form>
    30. <button type="button" class="btn btn-primary sel-btn">查询button>
    31. <br><br>
    32. <p>地区列表: p>
    33. <ul class="list-group">
    34. <li class="list-group-item">东城区li>
    35. ul>
    36. div>
    37. <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js">script>
    38. <script>
    39. /*
    40. 获取地区列表: http://hmajax.itheima.net/api/area
    41. 查询参数:
    42. pname: 省份或直辖市名字
    43. cname: 城市名字
    44. */
    45. // 目标: 根据省份和城市名字, 查询地区列表
    46. // 1. 查询按钮-点击事件
    47. document.querySelector('.sel-btn').addEventListener('click', () => {
    48. // 2. 获取省份和城市名字
    49. let pname = document.querySelector('.province').value
    50. let cname = document.querySelector('.city').value
    51. // 3. 基于axios请求地区列表数据
    52. axios({
    53. url: 'http://hmajax.itheima.net/api/area',
    54. params: {
    55. pname,
    56. cname
    57. }
    58. }).then(result => {
    59. // console.log(result)
    60. // 4. 把数据转li标签插入到页面上
    61. let list = result.data.list
    62. console.log(list)
    63. let theLi = list.map(areaName => `
    64. ${areaName}
    65. `).join('')
  • console.log(theLi)
  • document.querySelector('.list-group').innerHTML = theLi
  • })
  • })
  • script>
  • body>
  • html>
  • 常用请求方法和数据提交

    前面都是从服务器“拿”(获取)数据,

    怎样把数据“存”(提交、保存)到服务器呢?

    什么情况需要提交数据?

    注意区分:params和data

    method不区分大小写,get可以省略,属性值为字符串,记得加上引号

    数据提交场景——注册账号

    实操代码:

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>常用请求方法和数据提交title>
    8. head>
    9. <body>
    10. <button class="btn">注册用户button>
    11. <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js">script>
    12. <script>
    13. /*
    14. 注册用户:http://hmajax.itheima.net/api/register
    15. 请求方法:POST
    16. 参数名:
    17. username:用户名(中英文和数字组成,最少8位)
    18. password:密码 (最少6位)
    19. 目标:点击按钮,通过axios提交用户和密码,完成注册
    20. */
    21. document.querySelector('.btn').addEventListener('click', () => {
    22. axios({
    23. url: 'http://hmajax.itheima.net/api/register',
    24. method: 'POST',
    25. data: {
    26. username: 'itheima007',
    27. password: '7654321'
    28. }
    29. })
    30. })
    31. script>
    32. body>
    33. html>

    重复提交相同数据,会提示账号被占用:

    总结

    axios 错误处理

    想要把错误信息展示给用户(用户不会去查看控制台)

    在axios的then方法后使用catch方法,

    当出现axios错误时,控制台一共会出现两段错误信息,

    第一段(上面一段)为浏览器报错,它是没有服务器返回的错误原因

    不管它

    而在下面一段(第二段)是axios捕获(catch)到的错误信息

    是一个对象,

    在response属性的data属性,有报错原因

    我们要取到它,再反馈给用户

    通过catch方法捕获错误信息(错误信息传至形参error)

    (错误信息不再爆红,之前爆红 显示Uncaught(in pormise),未捕获)

    把错误原因取出error.response.data.message

    用提示框提示用户alert

    HTTP协议-报文

    报文中有一些自动生成的,

    也有一些对应着axios的选项设置,比如post方法,url,

    其中Content-Type: application/json规定的是这次请求携带的数据类型

    一个空行后面,就是携带的json字符串了

    axios在运行时会把代码中的data对象转成json字符串携带到请求报文中。

    请求报文的组成部分/格式

    自己(程序员)如何查看这些请求信息?——浏览器

    发送请求之后,

    网络-->fetch/XHR-->选中某一个请求-->标头(看请求头,载荷看请求体)-->点击查看源代码(点击后变成查看解析结果)

    部分内容(协议 http://)经浏览器格式化

    总结:

    报文一共有四个部分:

    请求行、请求头、空行、请求体

    请求报文-错误排查

    在登录时,报错“用户名或密码错误”,如何排查错误?

    把input框type改成text可以看到密码

    查看请求报文,发现所传密码有误

    原来是在代码中,获取密码框出现错误

    HTTP 协议-响应报文

    响应报文也分成四部分,

    其中响应行中携带HTTP响应状态码

    响应状态码表示请求是否成功

    关注2和4开头的(200、404)

    客户端错误,客户端可以理解为浏览器

    通过代码发送请求后,这次要查看的是“响应”标头

    响应头(携带额外信息)

    响应体

    实操代码:

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>HTTP协议_响应报文title>
    8. head>
    9. <body>
    10. <button class="btn">注册用户button>
    11. <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js">script>
    12. <script>
    13. /*
    14. 注册用户: http://hmajax.itheima.net/api/register
    15. 请求方法: POST
    16. 参数名:
    17. username: 用户名 (中英文和数字组成, 最少8位)
    18. password: 密码 (最少6位)
    19. 目标: 点击按钮, 通过axios提交用户和密码, 完成注册
    20. 需求: 使用axios错误处理语法, 拿到报错信息, 弹框反馈给用户
    21. */
    22. document.querySelector('.btn').addEventListener('click', () => {
    23. axios({
    24. url: 'http://hmajax.itheima.net/api/registrweer1ddd',
    25. method: 'post',
    26. data: {
    27. username: 'itheima007',
    28. password: '7654321'
    29. }
    30. }).then(result => {
    31. // 成功
    32. console.log(result)
    33. }).catch(error => {
    34. // 失败
    35. // 处理错误信息
    36. // console.log(error)
    37. console.log(error.response.data.message)
    38. // alert(error.response.data.message)
    39. })
    40. })
    41. script>
    42. body>
    43. html>

    总结

    接口文档

    文档内容与代码相对应

    application/json是

    后端告诉我们,这一次提交的请求体数据需要json字符串

    我们传入的不是data对象吗?

    axios源码发现data属性值为对象,内部会把对象转成json字符串,携带给服务器

    已注册,实操登录

    对照接口文档,填入相关信息:url、请求方法、请求体数据

    没有使用then方法捕获,但可以在浏览器中直接查看响应

    查看请求载荷(请求体)(需要查看源代码),发现已经转成json字符串。

    总结:接口文档是后端提供的描述接口的文章

    案例-用户登录

     面对嵌套多层的对象,可以在浏览器中找到需要的属性并右键,选择复制属性路径

    error. 然后粘贴

    实操代码:

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>案例_登录title>
    8. <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css">
    9. <style>
    10. html,
    11. body {
    12. background-color: #EDF0F5;
    13. width: 100%;
    14. height: 100%;
    15. display: flex;
    16. justify-content: center;
    17. align-items: center;
    18. }
    19. .container {
    20. width: 520px;
    21. height: 540px;
    22. background-color: #fff;
    23. padding: 60px;
    24. box-sizing: border-box;
    25. }
    26. .container h3 {
    27. font-weight: 900;
    28. }
    29. style>
    30. <style>
    31. .form_wrap {
    32. color: #8B929D !important;
    33. }
    34. .form-text {
    35. color: #8B929D !important;
    36. }
    37. style>
    38. <style>
    39. .alert {
    40. transition: .5s;
    41. opacity: 0;
    42. }
    43. .alert.show {
    44. opacity: 1;
    45. }
    46. style>
    47. head>
    48. <body>
    49. <div class="container">
    50. <h3>欢迎-登录h3>
    51. <div class="alert alert-success" role="alert">
    52. 提示消息
    53. div>
    54. <div class="form_wrap">
    55. <form>
    56. <div class="mb-3">
    57. <label for="username" class="form-label">账号名label>
    58. <input type="text" class="form-control username">
    59. div>
    60. <div class="mb-3">
    61. <label for="password" class="form-label">密码label>
    62. <input type="password" class="form-control password">
    63. div>
    64. <button type="button" class="btn btn-primary btn-login"> 登 录 button>
    65. form>
    66. div>
    67. div>
    68. <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js">script>
    69. <script>
    70. // 目标1:点击登录时,用户名和密码长度判断,并提交数据和服务器通信
    71. // 1.1 登录-点击事件
    72. document.querySelector('.btn-login').addEventListener('click', () => {
    73. // 1.2 获取用户名和密码
    74. const username = document.querySelector('.username').value
    75. const password = document.querySelector('.password').value
    76. // console.log(username, password)
    77. // 1.3 判断长度
    78. if (username.length < 8) {
    79. console.log('用户名必须大于等于8位')
    80. return // 阻止代码继续执行
    81. }
    82. if (password.length < 6) {
    83. console.log('密码必须大于等于6位')
    84. return // 阻止代码继续执行
    85. }
    86. // 1.4 基于axios提交用户名和密码
    87. // console.log('提交数据到服务器')
    88. axios({
    89. url: 'http://hmajax.itheima.net/api/login',
    90. method: 'POST',
    91. data: {
    92. username,
    93. password
    94. }
    95. }).then(result => {
    96. console.log(result)
    97. console.log(result.data.message)
    98. }).catch(error => {
    99. console.log(error)
    100. console.log(error.response.data.message)
    101. })
    102. })
    103. script>
    104. body>
    105. html>

    提示信息

    使用了bootstrap

    警告框(Alert) · Bootstrap v5 中文文档 v5.3 | Bootstrap 中文网

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>案例_登录_提示消息title>
    8. <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css">
    9. <style>
    10. html,
    11. body {
    12. background-color: #EDF0F5;
    13. width: 100%;
    14. height: 100%;
    15. display: flex;
    16. justify-content: center;
    17. align-items: center;
    18. }
    19. .container {
    20. width: 520px;
    21. height: 540px;
    22. background-color: #fff;
    23. padding: 60px;
    24. box-sizing: border-box;
    25. }
    26. .container h3 {
    27. font-weight: 900;
    28. }
    29. style>
    30. <style>
    31. .form_wrap {
    32. color: #8B929D !important;
    33. }
    34. .form-text {
    35. color: #8B929D !important;
    36. }
    37. style>
    38. <style>
    39. .alert {
    40. transition: .5s;
    41. opacity: 0;
    42. }
    43. .alert.show {
    44. opacity: 1;
    45. }
    46. style>
    47. head>
    48. <body>
    49. <div class="container">
    50. <h3>欢迎-登录h3>
    51. <div class="alert alert-success" role="alert">
    52. 提示消息
    53. div>
    54. <div class="form_wrap">
    55. <form>
    56. <div class="mb-3">
    57. <label for="username" class="form-label">账号名label>
    58. <input type="text" class="form-control username">
    59. div>
    60. <div class="mb-3">
    61. <label for="password" class="form-label">密码label>
    62. <input type="password" class="form-control password">
    63. div>
    64. <button type="button" class="btn btn-primary btn-login"> 登 录 button>
    65. form>
    66. div>
    67. div>
    68. <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js">script>
    69. <script>
    70. // 目标1:点击登录时,用户名和密码长度判断,并提交数据和服务器通信
    71. // 目标2:使用提示框,反馈提示消息
    72. // 2.1 获取提示框
    73. const myAlert = document.querySelector('.alert')
    74. /**
    75. * 2.2 封装提示框函数,重复调用,满足提示需求
    76. * 功能:
    77. * 1. 显示提示框
    78. * 2. 不同提示文字msg,和成功绿色失败红色isSuccess(true成功,false失败)
    79. * 3. 过2秒后,让提示框自动消失
    80. */
    81. function alertFn(msg, isSuccess) {
    82. // 1> 显示提示框
    83. myAlert.classList.add('show')
    84. // 2> 实现细节
    85. myAlert.innerText = msg
    86. const bgStyle = isSuccess ? 'alert-success' : 'alert-danger'
    87. myAlert.classList.add(bgStyle)
    88. // 3> 过2秒隐藏
    89. setTimeout(() => {
    90. myAlert.classList.remove('show')
    91. // 提示:避免类名冲突,重置背景色
    92. myAlert.classList.remove(bgStyle)
    93. }, 2000)
    94. }
    95. // 1.1 登录-点击事件
    96. document.querySelector('.btn-login').addEventListener('click', () => {
    97. // 1.2 获取用户名和密码
    98. const username = document.querySelector('.username').value
    99. const password = document.querySelector('.password').value
    100. // console.log(username, password)
    101. // 1.3 判断长度
    102. if (username.length < 8) {
    103. alertFn('用户名必须大于等于8位', false)
    104. console.log('用户名必须大于等于8位')
    105. return // 阻止代码继续执行
    106. }
    107. if (password.length < 6) {
    108. alertFn('密码必须大于等于6位', false)
    109. console.log('密码必须大于等于6位')
    110. return // 阻止代码继续执行
    111. }
    112. // 1.4 基于axios提交用户名和密码
    113. // console.log('提交数据到服务器')
    114. axios({
    115. url: 'http://hmajax.itheima.net/api/login',
    116. method: 'POST',
    117. data: {
    118. username,
    119. password
    120. }
    121. }).then(result => {
    122. alertFn(result.data.message, true)
    123. console.log(result)
    124. console.log(result.data.message)
    125. }).catch(error => {
    126. alertFn(error.response.data.message, false)
    127. console.log(error)
    128. console.log(error.response.data.message)
    129. })
    130. })
    131. script>
    132. body>
    133. html>

    form-serialize 插件

    打印获取到的表单数据(表单元素的值)

    表单元素需要设置name属性,name属性回作为返回对象的属性名

    配置对象中的hash属性用于设置获取数据的结构:

    为true时,获取数据为JS对象;

    为false时,获取数据为查询字符串。

    一般使用true,表单获取的数据会被提交到服务器,将被携带在请求体,一般要求传一个对象。

    empty属性设置是否获取空值(表单元素的值为空)

    如果不获取空值,而表单元素的值均为空,则返回空对象(不是null)

    登录案例结合serialize插件

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>案例_登录_插件使用title>
    8. <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css">
    9. <style>
    10. html,
    11. body {
    12. background-color: #EDF0F5;
    13. width: 100%;
    14. height: 100%;
    15. display: flex;
    16. justify-content: center;
    17. align-items: center;
    18. }
    19. .container {
    20. width: 520px;
    21. height: 540px;
    22. background-color: #fff;
    23. padding: 60px;
    24. box-sizing: border-box;
    25. }
    26. .container h3 {
    27. font-weight: 900;
    28. }
    29. style>
    30. <style>
    31. .form_wrap {
    32. color: #8B929D !important;
    33. }
    34. .form-text {
    35. color: #8B929D !important;
    36. }
    37. style>
    38. <style>
    39. .alert {
    40. transition: .5s;
    41. opacity: 0;
    42. }
    43. .alert.show {
    44. opacity: 1;
    45. }
    46. style>
    47. head>
    48. <body>
    49. <div class="container">
    50. <h3>欢迎-登录h3>
    51. <div class="alert alert-success" role="alert">
    52. 提示消息
    53. div>
    54. <div class="form_wrap">
    55. <form class="login-form">
    56. <div class="mb-3">
    57. <label for="username" class="form-label">账号名label>
    58. <input type="text" class="form-control username" name="username">
    59. div>
    60. <div class="mb-3">
    61. <label for="password" class="form-label">密码label>
    62. <input type="password" class="form-control password" name="password">
    63. div>
    64. <button type="button" class="btn btn-primary btn-login"> 登 录 button>
    65. form>
    66. div>
    67. div>
    68. <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js">script>
    69. <script src="./lib/form-serialize.js">script>
    70. <script>
    71. // 目标1:点击登录时,用户名和密码长度判断,并提交数据和服务器通信
    72. // 目标2:使用提示框,反馈提示消息
    73. // 目标3:使用form-serialize插件,收集用户名和密码
    74. // 2.1 获取提示框
    75. const myAlert = document.querySelector('.alert')
    76. /**2.2 封装提示框函数,重复调用,满足提示需求
    77. * 功能:
    78. * 1. 显示提示框
    79. * 2. 不同提示文字msg,和成功绿色失败红色isSuccess(true成功,false失败)
    80. * 3. 过2秒后,让提示框自动消失
    81. */
    82. function alertFn(msg, isSuccess) {
    83. // 1> 显示提示框
    84. myAlert.classList.add('show')
    85. // 2> 实现细节
    86. myAlert.innerText = msg
    87. const bgStyle = isSuccess ? 'alert-success' : 'alert-danger'
    88. myAlert.classList.add(bgStyle)
    89. // 3> 过2秒隐藏
    90. setTimeout(() => {
    91. myAlert.classList.remove('show')
    92. // 提示:避免类名冲突,重置背景色
    93. myAlert.classList.remove(bgStyle)
    94. }, 2000)
    95. }
    96. // 1.1 登录-点击事件
    97. document.querySelector('.btn-login').addEventListener('click', () => {
    98. // 3.2 使用serialize函数,收集登录表单里用户名和密码
    99. const form = document.querySelector('.login-form')
    100. const data = serialize(form, { hash: true, empty: true })
    101. console.log(data)
    102. // {username: 'itheima007', password: '7654321'}
    103. const { username, password } = data
    104. // 1.2 获取用户名和密码
    105. // const username = document.querySelector('.username').value
    106. // const password = document.querySelector('.password').value
    107. console.log(username, password)
    108. // 1.3 判断长度
    109. if (username.length < 8) {
    110. alertFn('用户名必须大于等于8位', false)
    111. console.log('用户名必须大于等于8位')
    112. return // 阻止代码继续执行
    113. }
    114. if (password.length < 6) {
    115. alertFn('密码必须大于等于6位', false)
    116. console.log('密码必须大于等于6位')
    117. return // 阻止代码继续执行
    118. }
    119. // 1.4 基于axios提交用户名和密码
    120. // console.log('提交数据到服务器')
    121. axios({
    122. url: 'http://hmajax.itheima.net/api/login',
    123. method: 'POST',
    124. data: {
    125. username,
    126. password
    127. }
    128. }).then(result => {
    129. alertFn(result.data.message, true)
    130. console.log(result)
    131. console.log(result.data.message)
    132. }).catch(error => {
    133. alertFn(error.response.data.message, false)
    134. console.log(error)
    135. console.log(error.response.data.message)
    136. })
    137. })
    138. script>
    139. body>
    140. html>

    我是Capybara,期待你的点赞支持。

  • 相关阅读:
    【Python案例】——利用Django搭建一个钓鱼网站【轻松入门】
    利用torch.nn实现logistic回归在人工构造的数据集上进行训练和测试
    现代循环神经网络-门控循环单元(GRU)
    DP27 跳跃游戏(二)
    阻抗&导纳控制理解
    1.8 逻辑运算(Python)
    Python中的@lru_cache装饰器
    LSTM基础理论与实例
    在Xamarin.Android项目中调用自己写的java jar包
    计算机网络的一些知识点
  • 原文地址:https://blog.csdn.net/upgrade_bro/article/details/133813711