zoukankan      html  css  js  c++  java
  • Web全栈探索,Vue基础系列,前后端交互(三)

    axios

    1.特性

    • 基于promise用于浏览器和node.js的http客户端
    • 支持浏览器和node.js
    • 支持promise
    • 能拦截请求和响应
    • 自动转换JSON数据
    • 能转换请求和响应数据

    2.支持库文件下载地址

    https://github.com/axios/axios
    
    
    库文件地址(解压后):
    axios-masterdistaxios.js

    3.入门代码

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
    
    <script type="text/javascript" src="../js/axios.js"></script>
    <script type="text/javascript">
        axios.get('http://10.5.34.66:8104/temp/string').then(function(ret){
            
            // 此种方法只能用于获取后台字符串返回结果
            
            // .data用于直接获取后台的实际数据
            console.log(ret.data)
            // 原对象除了 data 数据以外,还有其他很多属性
            console.log(ret)
        })
    </script>
    </body>
    </html>
    

    4.常用 API

    1.get和 delete请求传递参数

    • 通过传统的url 以 ? 的形式传递参数
    • restful 形式传递参数
    • 通过params 形式传递参数
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
    
    <script type="text/javascript" src="../js/axios.js"></script>
    <script type="text/javascript">
    
        // 以 传统的url 以 ? 的形式传递参数
        axios.get('http://10.5.34.66:8104/temp?id=1').then(function(ret){
    
            console.log(ret.data)
        })
    
        // 以 restful 形式传递参数
        axios.get('http://10.5.34.66:8104/temp/1').then(function(ret){
    
            console.log(ret.data)
        })
    
        // 以 params 形式传参
        axios.get('http://10.5.34.66:8104/temp',{
            params:{
                id: 1
            }
        }).then(function(ret){
    
            // 以 restful 形式传递参数
            console.log(ret.data)
        })
    </script>
    </body>
    </html>
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
    
    <script type="text/javascript" src="../js/axios.js"></script>
    <script type="text/javascript">
    
        // 以 传统的url 以 ? 的形式传递参数
        axios.delete('http://10.5.34.66:8104/temp?id=1').then(function(ret){
    
            console.log(ret.data)
        })
    
        // 以 restful 形式传递参数
        axios.delete('http://10.5.34.66:8104/temp/1').then(function(ret){
    
            console.log(ret.data)
        })
    
        // 以 params 形式传参
        axios.delete('http://10.5.34.66:8104/temp',{
            params:{
                id: 1
            }
        }).then(function(ret){
    
            // 以 restful 形式传递参数
            console.log(ret.data)
        })
    </script>
    </body>
    </html>
    

    2.post 和 put 请求传递参数

    • 通过选项传递参数
    • 通过 URLSearchParams 传递参数
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
    
    <script type="text/javascript" src="../js/axios.js"></script>
    <script type="text/javascript">
    
        /*
          axios请求参数传递
        */
        axios.post('http://10.5.34.66:8104/temp', {
          id: 1,
          name: 'lanyue'
        }).then(function(ret){
          console.log(ret.data)
        })
    
        let paramsOne = new URLSearchParams();
        paramsOne.append('id', 1);
        paramsOne.append('name', 'lanyue');
        axios.post('http://10.5.34.66:8104/temp', paramsOne).then(function(ret){
          console.log(ret.data)
        })
    
        // axios put 请求传参
        axios.put('http://10.5.34.66:8104/temp', {
            id: 1,
            name: 'lanyue'
        }).then(function(ret){
            console.log(ret.data)
        })
    
        let paramsTwo = new URLSearchParams();
        paramsTwo.append('id', 1);
        paramsTwo.append('name', 'lanyue');
        axios.put('http://10.5.34.66:8104/temp', paramsTwo).then(function(ret){
            console.log(ret.data)
        })
    
    
    
    </script>
    </body>
    </html>
    

    5.响应结果

    注意:如果后台返回的是 json 数据,axios 会默认将数据转换为对象形式,前台获得数据后可以直接使用对象形式读取数据

    • data ===> 实际响应回来的数据
    • headers ===> 响应信息头
    • status ===> 响应状态码
    • statusText ===> 响应状态信息
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Document</title>
    </head>
    <body>
      
      <script type="text/javascript" src="../js/axios.js"></script>
      <script type="text/javascript">
        /*
          axios 响应结果
        */
        axios.get('http://http://10.5.34.66:8104/temp').then(function(ret){
            // 以对象方式调用结果
            console.log(ret.data.id)
        })
    
      </script>
    </body>
    </html>

    6.全局配置

    # 配置公共的请求头
    axios.defaults.baseURL = 'https://api.example.com';
    # 配置 超时时间
    axios.defaults.timeout = 2500;
    # 配置公共的请求头
    axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
    # 配置公共的 post 的 Content-Type
    axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

    示例代码

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
    
    <script type="text/javascript" src="../js/axios.js"></script>
    <script type="text/javascript">
        /*
          axios 全局配置
        */
    
        // 配置请求的基准URL地址
        // 这样可以简化代码编写
        axios.defaults.baseURL = 'http://10.5.34.66:8104/';
        axios.get('temp').then(function(ret){
            console.log(ret.data)
        })
    
        // 配置请求头信息
        // 每次放松请求时,都会添加自己定义的请求头
        axios.defaults.headers['myRequestHead'] = 'huHai';
        axios.get('http://10.5.34.66:8104/temp').then(function(ret){
            console.log(ret.data)
        })
    
    
    </script>
    </body>
    </html>
    

    请求头生效效果

    7.axios 拦截器

    注意:拦截器的作用并非拦住数据包不让收,而是在请求、响应之后对数据进行相应的操作

    1.请求拦截器

    请求拦截器的作用是在请求发送前进行一些操作

    例如在每个请求体里加上token,统一做了处理如果以后要改也非常容易

    2.响应拦截器

    响应拦截器的作用是在接收到响应后进行一些操作

    例如在服务器返回登录状态失效,需要重新登录的时候,跳转到登录页

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
    
    <script type="text/javascript" src="../js/axios.js"></script>
    <script type="text/javascript">
    
        /*
          axios请求拦截器
        */
        axios.interceptors.request.use(function(config) {
    
            // 利用请求拦截器为所有请求添加如下请求头
            config.headers.mytoken = 'huHai';
            // 必须返回 配置好的 config,否则拦截器设置无效
            return config;
    
        }, function(err){
            console.log(err)
        })
    
    
        /*
          axios响应拦截器
        */
        axios.interceptors.response.use(function(res) {
    
            // 得到响应结果,并利用响应拦截器将真正有效的数据(而不再是整个响应对象)返回
            let data = res.data;
            return data;
    
        }, function(err){
            console.log(err)
        })
    
        // 测试配置好拦截器的 axios
        axios.get('http://10.5.34.66:8104/temp').then(function(data){
            console.log(data)
        })
    </script>
    </body>
    </html>
    
    作者:蓝月

    -------------------------------------------

    个性签名:能我之人何其多,戒骄戒躁,脚踏实地地走好每一步

  • 相关阅读:
    [姿势] 关于Ubuntu16.04安装前后
    [题解] poj 1716 Integer Intervals (差分约束+spfa)
    [题解] hdu 2433 Travel (BFS)
    [题解] poj 3169 Layout (差分约束+bellmanford)
    [题解] poj 3660 Cow Contest (floyd)
    [题解] hdu 1142 A Walk Through the Forest (dijkstra最短路 + 记忆化搜索)
    [题解] poj 1724 ROADS (dijkstra最短路+A*搜索)
    [BZOJ1491][NOI2007]社交网络 floyd
    [BZOJ2064]分裂 状压dp
    [BZOJ3585]mex 主席树
  • 原文地址:https://www.cnblogs.com/viplanyue/p/13573727.html
Copyright © 2011-2022 走看看