本篇聊聊在Vue应用中使用axios处理ajax请求。

 

一.发送get请求



<!doctype html>
<html>

<head>
    <meta charset="utf-8">
    <title>axios处理ajax示例</title>
</head>

<body>
    <!-- 定义一个vue的管理区块,(MVVM中的View) -->
    <div id="app">
        <button @click="getApiData">点击得到数据</button>
        {{name}}
    </div>
</body>
<script>

    // 实例化vue对象(MVVM中的View Model)
    new Vue({
        // vm控制的区块为id为app的div,此div中的所有vue指令均可以被vm解析
        el: '#app',
        data: {
            // 数据 (MVVM中的Model)   
            name: ""
        },
        methods: {
            getApiData: function () {
                //设置请求路径
                var url = "http://192.168.1.5/api/getprodlist";
                // 发送请求:将数据返回到一个回到函数中
                _this = this;
                // 并且响应成功以后会执行then方法中的回调函数
                axios.get(url).then(function (result) {
                    // result是所有的返回回来的数据
                    // 包括了响应报文行
                    // 响应报文头
                    // 响应报文体
                    console.log(result.data.message[0]);
                    _this.name = result.data.message[0].name;
                });
            }
        }
    })
</script>

</html>



 

二.发送post请求



<!doctype html>
<html>

<head>
    <meta charset="utf-8">
    <title>axios处理ajax示例</title>
</head>

<body>
    <!-- 定义一个vue的管理区块,(MVVM中的View) -->
    <div id="app">
        <button @click="postApiData">点击提交数据</button>
    </div>

</body>

<script>

    // 实例化vue对象(MVVM中的View Model)
    new Vue({
        // vm控制的区块为id为app的div,此div中的所有vue指令均可以被vm解析
        el: '#app',
        data: {
            // 数据 (MVVM中的Model)   
        },
        methods: {
            postApiData: function () {
                var url = "http://192.168.1.5/api/addproduct";
                // post有两个参数
                //参数1:请求的路径
                //参数2:提交的参数
                //提交参数的两种形态:
                //          1.可以直接传入字符串 name=张三&age=19
                //          2.可以以对象的形式传入{name:"三",age:19}
                axios.post(url, { name: "拖油瓶前来报道" }).then(function (res) {
                    var resData = res.data;
                    if (resData.status == "0") { //0表示成功,1表示失败    
                        alert(resData.message);
                    } else {
                        alert(resData.message);
                    }
                });

            }
        }
    })
</script>

</html>



 

三.细节优化



<!doctype html>
<html>

<head>
    <meta charset="utf-8">
    <title>axios处理ajax示例</title>
</head>

<body>
    <!-- 定义一个vue的管理区块,(MVVM中的View) -->
    <div id="app">
        <button @click="getApiData">点击得到数据</button>
        <button @click="postApiData">点击提交数据</button> {{name}}

    </div>

</body>

<script>
    //细节处理一:可以给axios的ajax请求设置统一的主机和端口号
    axios.defaults.baseURL = "http://192.168.1.5/";
    //细节处理二: 可以将axios这个对象添加到Vue的原型对象中,将来在使用的时候就只需要使用this.对象名就可以了
    Vue.prototype.$http = axios;


    // 实例化vue对象(MVVM中的View Model)
    new Vue({
        // vm控制的区块为id为app的div,此div中的所有vue指令均可以被vm解析
        el: '#app',
        data: {
            // 数据 (MVVM中的Model) 
            name: ""
        },
        methods: {
            getApiData: function() {
                //设置请求路径
                var url = "api/getprodlist";
                // 发送请求:将数据返回到一个回到函数中
                _this = this;
                // 并且响应成功以后会执行then方法中的回调函数
                this.$http.get(url).then(function(result) {
                    // result是所有的返回回来的数据
                    // 包括了响应报文行
                    // 响应报文头
                    // 响应报文体
                    _this.name = result.data.message[0].name;
                }).catch(function() {
                    alert("出错了");
                });
            },

            postApiData: function() {
                var url = "api/addproduct";
                // post有两个参数
                //参数1:请求的路径
                //参数2:提交的参数
                //提交参数的两种形态:
                //          1.可以直接传入字符串 name=张三&age=19
                //          2.可以以对象的形式传入{name:"三",age:19}
                this.$http.post(url, {
                    name: "拖油瓶前来报道3 "
                }).then(function(res) {
                    var resData = res.data;
                    if (resData.status == "0") { //0表示成功,1表示失败    
                        alert(resData.message);
                    } else {
                        alert(resData.message);
                    }
                }).catch(function() {
                    alert("出错了");
                });;

            }
        }
    })
</script>

</html>