zoukankan      html  css  js  c++  java
  • Vue.js使用-http请求

    Vue.js使用-ajax使用
    1.为什么要使用ajax
    前面的例子,使用的是本地模拟数据,通过ajax请求服务器数据。

    2.使用jquery的ajax库示例

    new Vue({
        el: '#app',
        data: {
            searchQuery: '',
            columns: [{name: 'name', iskey: true}, {name: 'age'},{name: 'sex', dataSource:['Male', 'Female']}],
            peoples: []
        },
        ready: function () {
            this.getPeoples();
        },
        methods: {
            getPeoples: function () {
                var vm = this;
                $.ajax({
                    url: 'http://localhost:20000/my_test',
                    type: 'get',
                    dataType: 'json',
                    success: function (data) {
                        vm.$set('peoples', data.result);
                    },
                    error: function(xhr, errorType, error) {
                        alert('Ajax request error, errorType: ' + errorType +  ', error: ' + error)
                    }
                });
            }
        }
    })
    

    3.vue-resource库
    vue是基于数据驱动的,不需要直接操作DOM,因此没有必要引入jquery
    vue提供了一款轻量的http请求库,vue-resource
    vue-resource除了提供http请求外,还提供了inteceptor拦截器功能,在访问前,访问后,做处理。

    4.vue-resource语法-使用$http对象

    // 基于全局Vue对象使用http
    Vue.http.get('/someUrl',[options]).then(successCallback, errorCallback);
    Vue.http.post('/someUrl',[body],[options]).then(successCallback, errorCallback);
    // 在一个Vue实例内使用$http
    this.$http.get('/someUrl',[options]).then(sucessCallback, errorCallback);
    this.$http.post('/someUrl',[body],[options]).then(successCallback, errorCallback);
    

    then方法的回调函数写法有两种,第一种是传统的函数写法,第二种是更简洁的Lambda表达式写法。

    //传统写法
    this.$http.get('/someUrl',[options]).then(function(response){
    	//响应成功回调
    },function(response){
    	//响应错误回调
    });
    
    //Lambda写法
    this.$http.get('someUrl',[options]).then((response)=>{
    	//响应成功回调
    },(response)=>{
    	//响应错误回调
    });
    

    5.vue-resource示例

    <script src="js/vue-resource.js"></script>
    <script>
    new Vue({
            el: '#app',
            data: {
                searchQuery: '',
                columns: [{name: 'name', iskey: true}, {name: 'age'},{name: 'sex', dataSource:['Male', 'Female']}],
                peoples: []
            },
            ready: function () {
                this.getPeoples();
            },
            methods: {
                getPeoples: function () {
                    var vm = this;
                    vm.$http.get('http://localhost:20000/my_test').then(
                            function (data) {
                                var newdata = JSON.parse(data.body)
                                vm.$set('peoples', newdata.result)
                            }).catch(function (response) {
                                console.log(response)
                            })
                }
            }
        })
    </script>
    

    6.vue-resource用法-使用$resource对象
    除了使用$http对象访问http,还可以使用$resource对象来访问。
    resource服务默认提供以下几种action:
    get:{method: 'GET'},
    save:{method: 'POST'},
    query:{method: 'GET'},
    update:{method: 'PUT'},
    remove:{method: 'DELETE'},
    delete:{method: 'DELETE'},

    resource对象使用示例如下:

    new Vue({
            el: '#app',
            data: {
                searchQuery: '',
                columns: [{name: 'name', iskey: true}, {name: 'age'},{name: 'sex', dataSource:['Male', 'Female']}],
                peoples: []
            },
            ready: function () {
                this.getPeoples();
            },
            methods: {
                getPeoples: function () {
                    var vm = this;
                    var resource = this.$resource('http://localhost:20000/my_test')
    
                    resource.get().then(
                            function (data) {
                                var newdata = JSON.parse(data.body)
                                vm.$set('peoples', newdata.result)
                            }).catch(function (response) {
                                console.log(response)
                            })
                }
            }
        })
    

    7.拦截器interceptor
    语法如下:

    Vue.http.interceptors.push(function(request, next){
    	//...
    	//请求发送前的处理逻辑
    	//...
    	next(function(response){
    		//...
    		//请求发送后的处理逻辑
    		//...
    		//根据请求的状态,response参数会返回给successCallback或errorCallback
    		return response
    	})
    
    })
    

    8.拦截器interceptor使用示例

    <div id="help">
            <loading v-show="showLoading"></loading>
        </div>
    <template id="loading-template">
    			<div class="loading-overlay">
    				<div class="sk-three-bounce">
    					<div class="sk-child sk-bounce1"></div>
    					<div class="sk-child sk-bounce2"></div>
    					<div class="sk-child sk-bounce3"></div>
    				</div>
    			</div>
        </template>
    <script>
    var help = new Vue({
            el: '#help',
            data: {
                showLoading: false
            },
            components: {
                'loading': {
                    template: '#loading-template'
                }
            }
        })
    
        Vue.http.interceptors.push(function(request, next){
            help.showLoading = true
            next(function (response) {
                help.showLoading = false
                return response
            })
        })
    </script>
    

    9.vue-resource的优点
    vue-resource比jquery轻量,可以使用Vue.http或者Vue.resource处理HTTP请求,两者没有什么区别。
    另外可以是用interceptor在请求前和请求后附加一些行为。

  • 相关阅读:
    Vue插件配置和 后台交互
    Vue项目环境搭建
    数据结构之链表
    数据结构之线性表顺序结构
    leetcode-- Longest Common Prefix
    数据结构之拓扑排序
    数据结构之shell排序
    数据结构之插入排序
    leetcode
    leetcode
  • 原文地址:https://www.cnblogs.com/shijingjing07/p/8529173.html
Copyright © 2011-2022 走看看