vue中数据请求的三种方法

注意请求可能存在跨域问题,需要去配置好

这三种建议使用axios

1.resource

  Vue 要实现异步加载需要使用到 vue-resource 库。

  Vue.js 2.0 版本推荐使用 axios 来完成 ajax 请求。

  先导入一个线上cdn的地址,当然还可以去npm安装,但个人觉得这种方便

<script src="https://cdn.staticfile.org/vue-resource/1.5.1/vue-resource.min.js"></script>

  实现GET请求

    <div id="box">
        <ul>
            <li v-for=‘item of img‘><img :src=‘item.img‘ ></li>
        </ul>
    </div>
    <script>
        var app = new Vue({
            el: ‘#box‘,
            data: {
                img: ‘‘
            },
            mounted() {
                //get请求
                this.$http.get(‘http://localhost:3000/api/banner‘).then(function(res){
                    this.img = res.body.data
                },function(){
                    console.log(‘请求失败处理‘);
                });
            }
        })
    </script>

  如果需要传递数据,可以使用 this.$http.get(‘get.php‘,{params : jsonData}) 格式,第二个参数 jsonData 就是传到后端的数据。

  实现POST请求

<div id="box">
        <ul>
            <li v-for=‘item of img‘><img :src=‘item.img‘ ></li>
        </ul>
    </div>
    <script>
        var app = new Vue({
            el: ‘#box‘,
            data: {
                img: ‘‘
            },
            mounted() {
                //post请求  需要第三个参数{emulateJSON:true}
                this.$http.get(‘http://localhost:3000/api/banner‘,{name: ‘王富贵‘},{emulateJSON:true}).then(function(res){
                    this.img = res.body.data
                },function(){
                    console.log(‘请求失败处理‘);
                });
            }
        })

  post 发送数据到后端,需要第三个参数 {emulateJSON:true}。

  emulateJSON 的作用: 如果Web服务器无法处理编码为 application/json 的请求,你可以启用 emulateJSON 选项。

2.fetch(次方法vue自带的不需要安装其他)

  GET方法

  这个方法只能在地址栏传参

//get方法  只能在地址栏传参
fetch(‘http://localhost:3000/api/banner‘)
.then(res => {
    //return 返回给上一层 ,不然下一层用不了
    return res.json()
})
.then(data => {
    console.log(data)
})

  POST方法

var url = ‘http://localhost:3000/api/user/loging‘
fetch(url, {
    method: ‘post‘,
    headers: {
        //这里是需要去network里面看
        ‘Content-Type‘: ‘application/x-www-form-urlencoded‘
    },
    body: ‘tel=xdd212&password=1515‘
})
.then(res => {
    //return 返回给上一层 ,不然下一层用不了
    return res.json()
})
.then(data => {
    console.log(data)
})

  另一种传参方式

//post 另一种传参方式
fetch(url, {
    method: ‘post‘,
    headers: {
        //看个人习惯
        ‘Content-Type‘: ‘application/json‘
    },
    body: JSON.stringify({
        tel: ‘xdd212‘,
        password: ‘1515‘
    })
})
.then(res => {
    //return 返回给上一层 ,不然下一层用不了
    return res.json()
})
.then(data => {
    console.log(data)
})

3.axios

  Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中

  用法和jq很类似

  安装或者引入cdn地址   npm i axios

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

  GET请求

    <div id="box">
        <ul>
            <li v-for=‘item of img‘><img :src=‘item.img‘ ></li>
        </ul>
    </div>
    <script>
        var app = new Vue({
            el: ‘#box‘,
            data: {
                img: ‘‘
            },
            mounted(){
                //需要传参的话可以在地址栏后面拼接
                axios.get(‘http://localhost:3000/api/banner‘,
                //还可以这样传参
                //     {
                //         params:{
                //             name:‘王富贵‘
                //         }
                //     }
                )
                .then(res => {
                    console.log(res)
                })
            }
        })
    </script>

  POST请求

    <div id="box">
        <ul>
            <li v-for=‘item of img‘><img :src=‘item.img‘ ></li>
        </ul>
    </div>
    <script>
        var app = new Vue({
            el: ‘#box‘,
            data: {
                img: ‘‘
            },
            mounted(){
                //需要传参的话可以在地址栏后面拼接
                axios.post(‘http://localhost:3000/api/urse/loging‘,
                     {
                            age: 18
                             name:‘王富贵‘
                     }
                )
                .then(res => {
                    console.log(res)
                })
            }
        })
    </script>

  一次执行多个请求

var app = new Vue({
            el: ‘#box‘,
            data: {
                img: ‘‘
            },
            mounted(){
                function fn1(){
                    return axios.get(‘http://localhost:3000/api/banner‘)
                }
                function fn2(){
                    return axios.get(‘http://localhost:3000/api/pro‘)
                }
                //注意这里必须要使用数组
                axios.all([fn1() , fn2()])
                //函数里面对应的数字里面的值
                .then(axios.spread(function (fn1, fn2) {
                    console.log(fn1)
                }))
            }
        })

  axios

  可以自己配置参数

var app = new Vue({
            el: ‘#box‘,
            data: {
                img: ‘‘
            },
            mounted(){
                axios({
                    //注意不写请求方式的话默认是get
                    method: ‘post‘,
                    url: ‘http://localhost:3000/api/user/loging‘,
                    data: {
                        tel: "xdd212",
                        password: "1515"
                    }
                })
                .then(res => {
                    console.log(res)
                })
            }
        })

  你可以自己定义一个axios

        //这里创建一个自定义配置的axios
        var init = axios.create({
            //这里可配置文件的长路径
            baseURL: ‘http://localhost:3000/api‘
        })
        // 假设如果很多接口都需要使用 token验证,可以把token信息放在请求头
        init.defaults.headers.token = ‘1231654984561646546565464654654646321654asdasdasd‘

        var app = new Vue({
            el: ‘#box‘,
            data: {
                img: ‘‘
            },
            mounted(){
                //下面调用axios的时候就是调用我们自定义创建的
                init({
                    method:‘get‘,
                    //然后到这下面可以直接写短路径,后期方便维护
                    url: ‘/banner‘
                })
                .then(res => {
                    console.log(res)
                })
                //此方法也是一样
                init.get(‘/banner‘)
                .then(res => {
                    console.log(res)
                })
            }
        })

  拦截器

  请求拦截器和响应拦截器

//请求前
        axios.interceptors.request.use(function (config) {
            // 可以设置 加载的动画效果 的展示
            //这里指的是请求之前做点什么
            console.log(‘正在加载...‘)
            return config
        }, function (error) {
            // 对请求错误做些什么
            return Promise.reject(error);
        })

        //响应前
        axios.interceptors.response.use(function (config) {
            // 可以设置 加载的动画效果 的隐藏
            //这里指的是请求之前做点什么
            console.log(‘加载完毕‘)
            return config
        }, function (error) {
            // 对请求错误做些什么
            return Promise.reject(error);
        })

        var app = new Vue({
            el: ‘#box‘,
            data: {
                img: ‘‘
            },
            mounted(){
                axios.get(‘http://localhost:3000/api/banner‘)
            }
        })

原文地址:https://www.cnblogs.com/dcyd/p/12491949.html

时间: 2024-08-13 14:52:09

vue中数据请求的三种方法的相关文章

C#中datatable导出excel(三种方法)

方法一:(拷贝直接可以使用,适合大批量资料, 上万笔)Microsoft.Office.Interop.Excel.Application appexcel = new Microsoft.Office.Interop.Excel.Application();SaveFileDialog savefiledialog = new SaveFileDialog();System.Reflection.Missing miss = System.Reflection.Missing.Value;ap

spring在xml文件中配置bean的三种方法

一.最常见,也是缺省,是调用spring的缺省工厂类 spring缺省工厂类:org.springframework.beans.factory.support.DefaultListableBeanFactory使用其静态方法preInstantiateSingletons() 配置文件中最普通最基本的定义一个普通bean<bean id="DvdTypeDAOBean" class="com.machome.dvd.impl.DvdTypeDAO" >

IOS开发中数据持久化的几种方法--NSUserDefaults

IOS开发中数据持久化的几种方法--NSUserDefaults IOS 开发中,经常会遇到需要把一些数据保存在本地的情况,那么这个时候我们有以下几种可以选择的方案: 一.使用NSUserDefault是最简单直接的一个办法: 1)保存数据: 1 // 实例化一个NSUserDefaults单例对象 2 NSUserDefaults *user = [NSUserDefaults standardUserDefaults]; 3 // 把一个数组array保存在key为allContact的键值

Openerp 中打开 URL 的三种 方法

来自:http://shine-it.net/index.php/topic,8013.0.html 最近总结了,Openerp 中打开 URL 的三种 方法: 一.在form view 添加 <a>标签 二.使用url widget, <field name="field_name" widget="url"/> 三.使用按钮,return { 'type': 'ir.actions.act_url', 'http://www.opener

cocos2dx中创建动画的三种方法

1.最最原始的方法,先创建动画帧,再创建动画打包(animation),再创建动画(animate) 第一步: 创建动画帧:CCSpriteFrame,依赖于原始的资源图片(xx.png,xx.jpg) CCSpriteFrame *frame1=CCSpriteFrame::create("1.png"); CCSpriteFrame *frame2=CCSpriteFrame::create("2.png"); CCSpriteFrame *frame3=CCS

mfc 在VC的两个对话框类中传递参数的三种方法

弄了好久,今天终于把在VC中的对话框类之间传递参数的问题解决了,很开心,记录如下: 1. 我所建立的工程是一个基于MFC对话框的应用程序,一共有三个对话框,第一个对话框为主对话框,所对应的类为CTMDDDlg类.在主对话框上我放置了一个标签页(Tab Control)控件,其实现的功能是当单击标签提示A时进入页面A,即对话框A(所对应的类为CDialogChild1),单击B时进入对话框B(CDialogChild2). 整个工程的框架已经设计好了,在对话框A和对话框B上放置了许多控件,现在我想

android应用中去掉标题栏的三种方法

在android中去掉标题栏有三种方法,它们也有各自的特点. 1.在代码里实现 this.requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题栏 记住:这句代码要写在setContentView()前面. 2.在清单文件(manifest.xml)里面实现 <application android:icon="@drawable/icon" android:label="@string/app_name" a

linux中传文件的三种方法、windows

第一种方法:使用vsftpd服务 ftp配置文件主要内容:[[email protected] vsftpd]# cat vsftpd.conf|grep -v ^#|grep -v ^$anonymous_enable=YES #匿名登陆local_enable=YES #允许使用本地用户来登陆ftplocal_root=/var/ftp/pub #write_enable=YES #开放本地用户写的权限local_umask=022 #FTP上本地的文件权限,默认是077 anon_uplo

ASP.NET中身份验证的三种方法

Asp.net的身份验证有有三种,分别是"Windows | Forms | Passport",其中又以Forms验证用的最多,也最灵活.Forms 验证方式对基于用户的验证授权提供了很好的支持,可以通过一个登录页面验证用户的身份,将此用户的身份发回到客户端的Cookie,之后此用户再访问这个web应用就会连同这个身份Cookie一起发送到服务端.服务端上的授权设置就可以根据不同目录对不同用户的访问授权进行控制了. 问题来了,在实际是用中我们往往需要的是基于角色,或者说基于用户组的验