什么是Ajax:
浏览器与服务器进行数据通讯的技术,动态数据交互
axios库地址:
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>如何使用呢? 我们现有个感性的认识
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  <script>
    axios({
      url: 'http://hmajax.itheima.net/api/province'
    }).then(result => {
      console.log(result)
      console.log(result.data.list)
    })
  </script>
获取如下:


展示到页面:
<body>
  <p></p>
  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  <script>
    axios({
      url: 'http://hmajax.itheima.net/api/province'
    }).then(result => {
      const p=document.querySelector('p')
      p.innerHTML=result.data.list.join('<br>')
    })
  </script>
</body>
认识URL
URL是统一资源定位符,俗称网址,访问网络资源
组成: 协议、域名、资源路径
http协议:超文本传输协议,规定服务器和浏览器之间传输数据的格式
域名:标记服务器在互联网中的方位
资源路径:标记资源在服务器下具体位置
URL查询参数
浏览器提供给服务器的额外信息,让服务器返回浏览器想要的数据
语法:
http://xxx.com/xxx/xxx?参数名1=值1&参数名2=值2
axios-查询参数
语法: 使用axios提供的params选项(拿数据时的查询参数)
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  <script>
    axios({
      url: 'http://hmajax.itheima.net/api/city',
      params: {
        pname: '河北省'
      }
    }).then(result => {
      console.log(result)
    })
  </script>axios原码在运行时把参数名自动拼接到url上

地区查询:
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport"
    content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
  <title>~</title>
  <link rel="shortcut icon" href="https://www.bilibili.com/favicon.ico">
  <link rel="stylesheet" href="css/初始化表.css">
  <link rel="stylesheet" href="bootstrap\css\bootstrap.min.css">
  <meta name="keywords" content="..." />
  <style>
    /*写代码时始终要考虑权重问题!*/
    @font-face {
      font-family: 'icomoon';
      src: url('fonts/icomoon.eot?au9n7q');
      src: url('fonts/icomoon.eot?au9n7q#iefix') format('embedded-opentype'),
        url('fonts/icomoon.ttf?au9n7q') format('truetype'),
        url('fonts/icomoon.woff?au9n7q') format('woff'),
        url('fonts/icomoon.svg?au9n7q#icomoon') format('svg');
      font-weight: normal;
      font-style: normal;
      font-display: block;
    }
    .center-block {
      display: block;
      margin-left: auto;
      margin-right: auto;
      width: 500px;
    }
  </style>
</head>
<body>
  <div class="center-block">
    <form class="form-horizontal">
      <div class="form-group">
        <label for="inputEmail3" class="col-sm-2 control-label">Province</label>
        <div class="col-sm-10">
          <input type="text" class="form-control input1" id="inputEmail3" placeholder="Province">
        </div>
      </div>
      <div class="form-group">
        <label for="inputPassword3" class="col-sm-2 control-label">City</label>
        <div class="col-sm-10">
          <input type="text" class="form-control input2" id="inputPassword3" placeholder="City">
        </div>
      </div>
      <div class="form-group">
        <div class="col-sm-offset-2 col-sm-10">
        </div>
      </div>
      <div class="form-group">
        <div class="col-sm-offset-2 col-sm-10">
          <button class="btn btn-default" type="button">查询</button>
        </div>
      </div>
    </form>
    <p>地区列表:</p>
    <ul class="list-group">
    </ul>
    </table>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  <script>
    const input1 = document.querySelector('.input1')
    const input2 = document.querySelector('.input2')
    const btn = document.querySelector('.btn')
    btn.addEventListener('click', () => {
      let pname = input1.value
      let cname = input2.value
      axios({
        url: 'http://hmajax.itheima.net/api/area',
        params: {
          pname: pname,
          cname: cname
        }
      }).then(result => {
        let list = result.data.list
        let str = list.map(item => `<li class="list-group-item">${item}</li>`
        ).join('')
        console.log(str)
        document.querySelector('.list-group').innerHTML = str
      })
    })
  </script>
</body>
</html>
常用请求方法
资源的操作:
get:get请求可以得到我们想要的具体的数据,then方法指定成功时候的回调(params)
post:操作post请求增加一条或者多条数据,可以采用JSON的形式传输数据
put:我们采put请求修改数据,可以具体修改某一条数据
delete:删除数据
method:请求方法,get可以省略
data:提交数据
<script>
    
      axios({
        url: 'http://hmajax.itheima.net/api/register',
        method:'post',
        data: {
          username: 'qwertyu123',
          password: '123456'
        }
      }).then(result => {
        console.log(result)
      })
  </script>
axios错误处理
语法:
在then后通过 . (点)语法调用catch方法,传入回调函数并定义形参
<script>
    
      axios({
        url: 'http://hmajax.itheima.net/api/register',
        method:'post',
        data: {
          username: 'qwertyu123',
          password: '123456'
        }
      }).then(result => {
        console.log(result)
      }).catch(error=>{
        alert(error.response.data.message)
      })
  </script>
浏览器是如何把内容发送给服务器的?
这与请求报文有关
HTTP协议-请求报文
http格式规定了浏览器发送及浏览器返回内容的格式
请求报文:浏览器按照http协议要求的格式,发送给服务器的内容
请求报文的组成:
请求行:请求方法(如post),URL,协议
请求头:以键值对的格式携带的附加信息,如:Content-Type
空格:分隔请求头,空行之后是发送给服务器的资源
请求体:发送到资源
在浏览器中可以看到这些内容


响应报文
响应报文:服务器按照http协议要求的格式,返回给浏览器的内容
响应报文的组成:
响应行(状态行):协议,http响应状态码,状态信息
响应头:以键值对的格式携带的附加信息,如:Content-Type
空格:分隔响应头,空行之后是服务器返回的资源
响应体:返回的资源
http响应状态码
用来表明请求是否成功完成
2xx :请求成功
4xx:客户端错误
404:服务器找不到资源


接口
在使用AJAX与后端通讯,使用的URL,请求方法,以及参数

登录界面案例:
 <style>
    /*写代码时始终要考虑权重问题!*/
    @font-face {
      font-family: 'icomoon';
      src: url('fonts/icomoon.eot?au9n7q');
      src: url('fonts/icomoon.eot?au9n7q#iefix') format('embedded-opentype'),
        url('fonts/icomoon.ttf?au9n7q') format('truetype'),
        url('fonts/icomoon.woff?au9n7q') format('woff'),
        url('fonts/icomoon.svg?au9n7q#icomoon') format('svg');
      font-weight: normal;
      font-style: normal;
      font-display: block;
    }
    .form-control {
      width: 400px;
    }
    .btn-block {
      width: 100px;
    }
    .alert {
      width: 400px;
      height: 50px;
      opacity: 0;
    }
  </style>
</head>
<body>
  <div class="container">
    <form class="form-signin">
      <h2 class="form-signin-heading">Please sign in</h2>
      <div class="alert " role="alert">...</div>
      <label for="input" class="sr-only">Username</label>
      <input type="text" id="input" class="form-control username" placeholder="Username" required autofocus>
      <label for="inputPassword" class="sr-only">Password</label>
      <input type="password" id="inputPassword" class="form-control password" placeholder="Password" required>
      <div class="checkbox">
        <label>
          <input type="checkbox" value="remember-me"> Remember me
        </label>
      </div>
      <button class="btn btn-lg btn-primary btn-block" type="button">Sign in</button>
    </form>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  <script>
    const btn = document.querySelector('.btn')
    const username = document.querySelector('.username')
    const password = document.querySelector('.password')
    const Alert = document.querySelector('.alert')
    function MyAlert() {
      Alert.style.opacity = 1
      if (username.value.length < 8 || password.value.length < 6) {
        Alert.classList.remove('alert-success')
        Alert.classList.add('alert-danger')
        Alert.innerHTML = '错误!'
      }
      else {
        Alert.classList.remove('alert-danger')
        Alert.classList.add('alert-success')
        Alert.innerHTML = '登录成功'
      }
      return false
    }
    btn.addEventListener('click', function () {
      let flag = MyAlert()
      setTimeout(() => {
        Alert.style.opacity = 0
      }, 2000)
      if (!flag)
      {
        return
      }
        axios({
          url: 'http://hmajax.itheima.net/api/login',
          method: 'post',
          data: {
            username: username.value,
            password: password.value
          }
        }).then(result => {
          console.log(result)
        }).catch(error => {
        })
    })
  </script>
</body>
form-serialize.js
可以快速获取表单元素,通过解构对象获得用户信息




















