网络应用——axios+vue

  • Vue.js如何获取网络数据
  • 为什么是axios?ajax不香吗?
  • axios的使用方法
  • Vue.js如何结合axios


Vue.js如何获取网络数据

学习完Vue.js基本的语法后,如果要制作网络应用,必然也要使用到获取网络上的数据。Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中,在这里推荐大家使用。但是大家一定也会有疑问:为什么使用axios而不是ajax?axiox的使用方法是什么?以及Vue.js如何结合axios使用呢?下面为大家一一解答。

为什么是axios?ajax不香吗?

1、区别:
axios是通过Promise实现对ajax技术的一种封装,就像jquery对ajax的封装一样,简单来说就是ajax技术实现了局部数据的刷新,axios实现了对ajax的封装,axios有的ajax都有,ajax有的axios不一定有,总结一句话就是axios是ajax,ajax不止axios
2、优缺点对比:
ajax:
(1)本身是针对MVC编程,不符合前端MVVM的浪潮
(2)基于原生XHR开发,XHR本身的架构不清晰,已经有了fetch的替代方案,jquery整个项目太大,单纯使用ajax却要引入整个jquery非常不合理(采取个性化打包方案又不能享受cdn服务)
(3)ajax不支持浏览器的back按钮
(4)安全问题ajax暴露了与服务器交互的细节
(5)对搜索引擎的支持比较弱
(6)破坏程序的异常机制
(7)不容易调试
axios:
(1)从node.js创建http请求
(2)支持Promise API
(3)客户端防止CSRF(网站恶意利用)
(4)提供了一些并发请求的接口
总结一下:axios是对ajax的封装,更加安全方便,原生ajax架构不清晰,也不是面向MVVM编程,毛病一堆,所以,相对来说,axios对于Vue的使用者而言更加友好

axios的使用方法

更多具体方案可以通过官网文档或者axios中文文档/axios中文网查看,本文只对get和post的使用方式做个简单介绍,代码如下:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>axios的使用方法</title>
</head>

<body>
    <button class="get">使用get方法</button>
    <button class="post">使用post方法</button>
    <!-- <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> -->
    <script src="https://unpkg.com/axios@0.19.2/dist/axios.min.js"></script>
    <!-- https:github.com/axios/axios -->
    <script>
        /*
            接口1:随机笑话
            请求地址:https://autumnfish.cn/api/joke/list?num=4
            请求方法:get
            请求参数:num(笑话条数,数字)
            响应内容:随机笑话
        */

        document.querySelector(".get").onclick = function () {
            axios.get("https://autumnfish.cn/api/joke/list?num=4")
                .then(function (response) {
                    console.log(response);
                }, function (err) {
                    console.log(err);
                });
        }
        /*
            接口1:用户注册
            请求地址:https://autumnfish.cn/api/user/reg
            请求方法:post
            请求参数:username(用户名,字符串)
            响应内容:注册成功或失败
        */

        document.querySelector(".post").onclick = function () {
            axios.post("https://autumnfish.cn/api/user/reg", {
                    username: "zsf"
                })
                .then(function (response) {
                    console.log(response);
                }, function (err) {
                    console.log(err);
                });
        }
    </script>
</body>

</html>

分别点击2个按钮获取对应的请求结果:

为什么配置了axios后vue还是连不上后台 vue为啥用axios_vue.js


其中response是请求得到的数据,如果请求异常,则会得到异常信息err

Vue.js如何结合axios

在需要获取数据的函数中使用axios即可,但是需要注意的是因为多层函数嵌套的关系,this关键字会丢失,因此需要在axios中使用箭头函数或者that来代替this的方法。代码如下:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>vue结合axios</title>
</head>

<body>
    <div id="app">
        <button @click="getJoke">获取笑话</button>
        <p>{{joke}}</p>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script src="https://unpkg.com/axios@0.19.2/dist/axios.min.js"></script>
    <script>
        var app = new Vue({
            el: "#app",
            data: {
                joke: "这是个好好笑的笑话"
            },
            methods: {
                getJoke: function () {
                    // var that = this;
                    axios.get("https://autumnfish.cn/api/joke")
                        .then((response) => {
                            console.log(response.data);
                            this.joke = response.data;
                            // that.joke = response.data;
                        }, function (err) {
                            console.log(err);
                        });
                }
            }
        });
    </script>
</body>

</html>

页面显示如下:

为什么配置了axios后vue还是连不上后台 vue为啥用axios_es6_02


点击“获取笑话”按钮获取随机笑话替代:

为什么配置了axios后vue还是连不上后台 vue为啥用axios_ios_03