Vue2利用Axios发起请求的详细过程记录

目录
  • 前言
  • Axios的安装和配置
  • 发起简单GET请求
  • 发起POST请求
    • 发起简单POST请求
    • 发起POST请求并携带参数(一)
    • 发起POST请求并携带参数(二)
  • 上传文件测试
  • Axios的config配置
    • baseURL
    • timeout
    • withCredentials
  • 总结

前言

当你看到该文章时希望你已知晓什么是跨域请求以及跨域请求的处理,本文不会赘述

本文后台基于Springboot2.3进行搭建,Controller中不会写任何业务逻辑仅用于配合前端调试

Controller中使用的R.success为本人封装的工具类,代码在文末

Axios的安装和配置

在项目目录下执行命令安装axios

npm install -S axios

打开src路径下的main.js文件,在文件中引入axios依赖并挂载到vue全局属性中

// 引用axios依赖
import axios from 'axios'

// 挂在到vue中,这里将axios挂载为request,在组件中就可以使用this.request来调用axios了
Vue.prototype.request = axios;

发起GET请求调用的是axios中的get方法,点进去可以看到该方法接收了url和config两个对象

发起简单GET请求

@RestController
@RequestMapping("/user")
public class UserController {
    @GetMapping("/list")
    public R list() {
        return R.success("用户列表查询成功!");
    }
}
<template>
    <div id="index">
        <button @click="selectList">查询用户</button>
    </div>
</template>
<script>
export default {
    name: "index",
    methods: {
        selectList() {
            // 简单GET请求只需要传入URL就可以实现
            this.request.get("http://localhost:8000/user/list").then(res => {
                console.log("res", res);
            }).catch(e => {
                console.log("e", e);
            })
        }
    }
}
</script>
<style></style>

发起简单GET请求并携带参数

@RestController
@RequestMapping("/user")
public class UserController {
    @GetMapping("/get")
    public R get(String id) {
        return R.success("用户获取成功!");
    }
}
selectOne() {
    let config = {
        params: {id: "1"}
    }
    // url后面跟上config对象,config对象中的params属性对应的就是请求参数
    this.request.get("http://localhost:8000/user/get", config).then(res => {
        console.log("res", res);
    }).catch(e => {
        console.log("e", e);
    })
},

发起POST请求

发起POST请求调用的是axios中的post方法,点进去可以看到该方法的参数列表有三个对象

发起简单POST请求

@RestController
@RequestMapping("/user")
public class UserController {
    @PostMapping("/save")
    public R save() {
        return R.success("用户添加成功!");
    }
}
save() {
    // 发送简单POST请求与简单GET请求雷同,只需要将get方法修改为post方法即可
    this.request.post("http://localhost:8000/user/save").then(res => {
        console.log("res", res);
    }).catch(e => {
        console.log("e", e);
    })
},

发起POST请求并携带参数(一)

@RestController
@RequestMapping("/user")
public class UserController {
    /**
     * 一般发起POST请求都是将参数放在请求体中,然后在通过@RequestBody进行解析的
     * 这里我就不创建实体类了,直接使用Map集合来接收一下
     */
    @PostMapping("/save")
    public R save(@RequestBody Map<String, String> data) {
        return R.success("用户添加成功!")
                .setAttribute("name", data.get("username"))
                .setAttribute("pwd", data.get("password"));
    }
}
save() {
    let data = {
        username: "Java小学生丶",
        password: "123456789"
    }
    // 当看到参数列表的时候应该就能猜出来,直接将对象放在第二个参数上就可以
    // 需要注意的是这种方法携带的参数是放在请求体中的
    this.request.post("http://localhost:8000/user/save", data).then(res => {
        console.log("res", res);
    }).catch(e => {
        console.log("e", e);
    })
},

发起POST请求并携带参数(二)

上面说直接使用data传递参数是放在请求体中的,需要后端使用@RequestBody才能取到,这里将参数改为路径参数进行提交

@RestController
@RequestMapping("/user")
public class UserController {
    @PostMapping("/save")
    public R save(String username, String password) {
        return R.success("用户添加成功!")
                .setAttribute("name", username)
                .setAttribute("pwd", password);
    }
}
save() {
    let config = {
        params: {
            username: "Java小学生丶",
            password: "123456789"
        }
    }
    // 这里不使用data,改用config进行传参,还是将对象封装为params进行传递
    this.request.post("http://localhost:8000/user/save", null, config).then(res => {
        console.log("res", res);
    }).catch(e => {
        console.log("e", e);
    })
},

上传文件测试

除开GET、POST请求之外,还有PUT、DELETE等等类型的请求,这里就不一一测试了,来了解一下上传文件

@RestController
@RequestMapping("/user")
public class UserController {
    @PostMapping("/upload")
    public R upload(MultipartFile file, String fileName) {
        // file对象就是接收到的文件,针对文件的处理逻辑省略不写...
        return R.success("文件上传成功!")
                .setAttribute("fileName", fileName);
    }
<template>
    <div id="index">
        <!-- input:file 用于选择文件,选择文件后触发change事件调用fileChange方法 -->
        <input type="file" id="file" @change="fileChange" />
        <!-- 执行上传文件的方法 -->
        <button @click="upload">点击上传</button>
    </div>
</template>

<script>
export default {
    name: "index",
    data() {
        return {
            file: null
        }
    },
    methods: {
        fileChange(event) {
            // 当选择了某个文件后会触发该方法,将文件对象存放到file中
            this.file = event.target.files[0];
        },
        upload() {
            // 创建一个FormData对象,将file放进去,也可以放一些其他参数
            let data = new FormData();
            data.append('file', this.file);
            data.append('fileName', "11223344.txt");
            // 创建config对象,设置请求头类型为multipart/form-data
            let config = {
                headers: {'Content-Type': 'multipart/form-data'}
            }
            // 发起请求携带刚刚创建的对象
            this.request.post('http://localhost:8000/user/upload', data, config).then(res => {
                console.log("res", res);
            })
        }
    }
}
</script>

Axios的config配置

通过观察可以发现Axios的请求都会接收一个config对象,可以在node_modules/axios/index.d.ts文件看到该配置的详细信息:

配置项有很多,我也是个新人好多没接触过,这里就简单测试几个其他随时用随时查,推荐一个Axios中文网

baseURL

baseURL是个比较常用的属性,可以针对每个请求设置根地址,我们在发起请求时只需要关注请求路径即可

<script>
export default {
    name: "index",
    data() {
        return {
            config: {
                baseURL: "http://localhost:8000"
            }
        }
    },
    methods: {
        test() {
            let data = {name: "Java小学生丶"};
            this.request.post("/user/save", data, this.config).then(res => {
                console.log("res", res);
            });
        },
    }
}
</script>

timeout

timeout也属于比较常用的配置项,用于配置请求的超时时间,单位是毫秒ms,设置为0代表不设置超时时间

<script>
export default {
    name: "index",
    data() {
        return {
            config: {
                baseURL: "http://localhost:8000",
                timeout: 5000
            }
        }
    },
    methods: {
        test() {
            let data = {name: "张涵哲"};
            this.request.post("/user/save", data, this.config).then(res => {
                console.log("res", res);
            });
        },
    }
}
</script>

withCredentials

该属性同样比较常用,withCredentials的值为bool类型,用于设置是否允许携带Cookie,Axios请求默认是不允许携带Cookie的,可以通过Controller打印sessionID进行测试

<script>
export default {
    name: "index",
    data() {
        return {
            config: {
                baseURL: "http://localhost:8000",
                // 需要服务端进行配合
                withCredentials: true,
                timeout: 5000
            }
        }
    },
    methods: {
        test() {
            let data = {name: "Java小学生丶"};
            this.request.post("/user/save", data, this.config).then(res => {
                console.log("res", res);
            });
        },
    }
}
</script>

Axios暂时就写到这里,了解这些日常开发基本不成问题了,用熟config后可以试着封装一个工具类

总结

到此这篇关于Vue2利用Axios发起请求的文章就介绍到这了,更多相关Vue2用Axios发起请求内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • vue使用Axios做ajax请求详解

    vue2.0之后,就不再对vue-resource更新,而是推荐使用axios 1. 安装 axios $ npm install axios 或 $ bower install axios 2. 在要使用的文件中引入axios import axios from 'axios' 3. 使用axios做请求 可以通过向 axios 传递相关配置来创建请求, 只有 url 是必需的.如果没有指定 method,请求将默认使用 get 方法. { // `url` 是用于请求的服务器 URL url

  • vue axios请求超时的正确处理方法

    自从使用Vue2之后,就使用官方推荐的axios的插件来调用API,在使用过程中,如果服务器或者网络不稳定掉包了, 你们该如何处理呢? 下面我给你们分享一下我的经历. 具体原因 最近公司在做一个项目, 服务端数据接口用的是Php输出的API, 有时候在调用的过程中会失败, 在谷歌浏览器里边显示Provisional headers are shown. 按照搜索引擎给出来的解决方案,解决不了我的问题. 最近在研究AOP这个开发编程的概念,axios开发说明里边提到的栏截器(axios.Inter

  • vue axios同步请求解决方案

    在vue项目里面,需要循环发送ajax请求,出现的问题就是循环结束,第一次服务器还没返回,导致数据处理错误,需要使用同步请求 解决方案 目前没有发现axios可以同步请求,所以只能使用jQuery,配置同步请求: $.ajax({ url:'/comm/test1.php', type:'POST', //GET async:false, //或false,是否异步 data:{ name:'yang',age:25 }, timeout:5000, //超时时间 dataType:'json'

  • vue+axios全局添加请求头和参数操作

    走登录的接口都会返回一个token值,然后存起来方便之后调接口的时候给后台传过去,传给后台的方式有两种:(具体使用哪种需要和后台商量) 1.放在请求头中 2.放在接口的参数中 1.放在请求头中 下面代码是从本地cookie中拿token VueCookie:一个用于处理浏览器cookies的简单Vue.js插件. // 在封装axios的文件中添加拦截器 // 添加请求拦截器,在请求头中加token service.interceptors.request.use( config => { //

  • 解决vue2中使用axios http请求出现的问题

    使用axios处理post请求时,出现的问题解决 默认情况下: axios.post(url, params).then(res => res.data); 当url是远程接口链接时,会报404的错误: Uncaught (in promise) Error: Request failed with status code 404 我们需要实例化一个新的axios,并且设置他的消息头为'content-type': 'application/x-www-form-urlencoded' 于是得出

  • vue2.0设置proxyTable使用axios进行跨域请求的方法

    这里请求的是知乎日报的api,由@izzyleung这位大神提供的,这是github地址. 在vue-cli构建的项目中先安装axios npm install axios -S 这里暂不考虑用vuex封装的方式,只讲在当前组件中直接使用. 先在<script>中引入 用prototype将axios添加为vue原生的属性,$ajax相当于axios的别名. 然后在要调用的方法或是钩子中请求,$ajax就是上面注册的axios,如果想直接用axios不想设置prototype也可以直接按官方的

  • Vue2利用Axios发起请求的详细过程记录

    目录 前言 Axios的安装和配置 发起简单GET请求 发起POST请求 发起简单POST请求 发起POST请求并携带参数(一) 发起POST请求并携带参数(二) 上传文件测试 Axios的config配置 baseURL timeout withCredentials 总结 前言 当你看到该文章时希望你已知晓什么是跨域请求以及跨域请求的处理,本文不会赘述 本文后台基于Springboot2.3进行搭建,Controller中不会写任何业务逻辑仅用于配合前端调试 Controller中使用的R.

  • NodeJS基础API搭建服务器详细过程记录

    前言 在习惯了使用express框架,jade模板引擎等现成工具来写代码之后,很多人对于基本的NodeJS API会慢慢生疏.本文将以一个超小型web项目,来详细介绍如何使用NodeJS基础的http, fs, path, url等模块提供的API来搭建一个简单的web服务器.当做对NodeJS的一次复习,也为初学NodeJS的开发者提供一个参考.本文所搭建的项目将不会使用express等后端框架,仅使用最基础的NodeJS API,按照MVC设计模式的思路进行编码和讲解,交流意见.源代码地址如

  • nginx安装以及配置的详细过程记录

    目录 1 nginx 介绍 1 什么是nginx 2 应用场景 2 nginx安装 1 下载 2 安装要求的环境 1.需要安装gcc环境 2.第三方的开发包 3 nginx安装过程 3 启动nginx 4 查看nginx是否启动 5 关闭nginx 6 重启nginx 7 刷新配置文件 8 关闭防火墙,开启远程访问 9 访问nginx 10 配置虚拟主机 11 通过端口区分不同的主机 12 多个域名区分虚拟主机 1 什么是域名 2 nginx配置 3 测试 13 正向代理 14 反向代理 15

  • 安装PyTorch的详细过程记录

    目录 安装anaconda 环境管理 PyTorch安装 检验安装 总结 安装anaconda 登录anaconda的官网下载,anaconda是一个集成的工具软件不需要我们再次下载.anaconda官网 点击下载 跳转到这个页面如果你的Python版本正好是3.8版,那便可以直接根据系统去选择自己相应的下载版本就可以了. 但是如果你的Python版本号不是当前页面的版本号,那我建议你去选择相对应的版本号. 点击archive你就会跳转到下面的页面 你可以访问这篇博客去找到当前与你python版

  • bitbucket搭建详细过程记录

    目录 bitbucket 搭建 2 git 1 检查系统的git版本 2 卸载系统的git版本 3 安装git 3 mysql 3 bitbucket 1 下载bitbucket 2 下载jdbc driver 3 破解 bitbucket 搭建 1 jdk 8 如果有的话就不用安装了,此处采用rpm方式安装(不用配置环境变量) 把下载好的文件放在/usr/lib/java中(第一次安装需要新建java这一级目录),rpm -ivh jdk-8u221-linux-x64.rpm 最后采用jav

  • MyBatis-Plus自定义SQL的详细过程记录

    目录 前言 一.在src/main/resource目录下编写XML 1.1  目录结构 1.2   编写实体类对应的Mapper接口 1.3  编写UserMapper.xml 1.4  在配置文件中扫描我们的xml配置的位置. 1.5  测试 二.在src/main/java目录下编写XML 2.1  目录结构 2.2   编写实体类对应的Mapper接口 2.3   编写UserMapper.xml 2.4   编写配置文件 2.5   配置pom.xml(重要) 2.6  测试 三.cl

  • 脚手架(vue-cli)创建Vue项目的超详细过程记录

    目录 cli3.x/4.x创建Vue项目 1.创建项目 2.项目手动配置 3.选择vue版本 4.路由模式 5.配置文件的存放位置 6.配置保存 项目创建成功 总结 cli3.x/4.x创建Vue项目 1.创建项目 vue create vue_project(项目名) 敲击回车,出现以下页面 此处本人一般选择手动配置,因为eslint真的是个很可怕的东西,它对代码格式的严格要求,真的会把人逼疯的,代码有一点点不规范的地方程序都会报错 2.项目手动配置 按空格键选择或取消选择 3.选择vue版本

  • docker+Nginx部署前端项目的详细过程记录

    目录 相关配置安装 创建配置文件 项目打包与部署 一个相关报错: 总结 相关配置安装 安装Docker yum install docker 启动服务 start docker systemctl start docker Docker中拉取nginx镜像 docker pull nginx 创建配置文件 我们需要在根目录下创建Dockerfile文件和default.conf文件. 其中default.conf文件的名称是什么无所谓,只要在配置文件中注意使用相同名称即可. Dokcerfile

  • 解决在Vue中使用axios POST请求变成OPTIONS的问题

    POST请求变成OPTIONS 及报错信息(跨域) 主要解决方案:使用qs.stringify 1.安装qs npm install qs --save 2.axios配置和使用 在接口请求页面引入安装好的qs,如下图: 引入完成之后使用qs改变传递的参数data,如下: 这样就可以了,post请求的时候就不会再出现OPTIONS了 补充知识:axios发起请求,为什么先发送options请求,再发送get/post请求 引起原因 1,跨域: 2,请求头非默认情况. 默认请求头如下 Accept

  • vue中使用protobuf的过程记录

    由于目前公司采用了ProtoBuf做前后端数据交互,进公司以来一直用的是公司大神写好的基础库,完全不了解底层是如何解析的,一旦报错只能求人,作为一只还算有钻研精神的猿,应该去了解一下底层的实现,在这里记录一下学习过程. Protobuf简单介绍 Google Protocol Buffer(简称 Protobuf)是一种轻便高效的结构化数据存储格式,平台无关.语言无关.可扩展,可用于通讯协议和数据存储等领域. 有几个优点: 1.平台无关,语言无关,可扩展: 2.提供了友好的动态库,使用简单; 3

随机推荐