Vue.js 与 Axios 实战:从发送 AJAX 请求到 API 代理配置全攻略

Axios,流行的 js 库,用于发送 AJAX 请求。本文介绍Vue中咋用 Axios 发 AJAX 请求。

1 安装

先在项目中安装 Axios。进入项目目录运行:

bash

体验AI代码助手

代码解读

复制代码

cnpm install axios@0.17.1 --save

2 发送 AJAX 请求

在 Vue 组件中用它发 AJAX 请求。

示例

vue

体验AI代码助手

代码解读

复制代码

<template> <div> <button @click="getData">获取数据</button> <div v-if="data">{{ data }}</div> </div> </template> <script> // 先导 Axios 库 import axios from 'axios'; export default { data() { return { // 在组件的data()方法定义一个data属性,存储从服务器获取的数据 data: null, }; }, methods: { // 定义该方法,用于发送 AJAX 请求并更新组件的data属性 getData() { axios .get('/api/data') .then((response) => { this.data = response.data; }) .catch((error) => { console.log(error); }); }, }, }; </script>

getData 方法中,用 axios.get 方法发送 GET 请求。该方法接受一个 URL 参数,用于指定要请求的服务器端点。本例用 /api/data 作为 URL。

再用 Promise 的 then 方法处理响应,如果:

  • 请求成功,then 将接收一个响应对象,并将响应数据存储到组件的 data 属性中
  • 请求失败,则用 Promise 的 catch 方法处理错误

最后,在组件模板中,用一个按钮触发 getData 方法,并根据是否有数据来显示数据。

3 项目实战

组件很多,若每个组件都发 HTTP 请求,性能太差。咋优化?希望整个首页只发送一个 ajax 请求。显然,在 Home.vue 里发送最好不过。

组件有个生命周期函数 mounted:

js

体验AI代码助手

代码解读

复制代码

methods: { getHomeInfo () { // 本地 mock 数据 // axios.get('/api/index.json?city=' + this.city) axios.get('/static/mock/index.json') .then(this.getHomeInfoSuccess) }, getHomeInfoSuccess (res) { } }, mounted () { this.getHomeInfo() }

有人觉得,本地mock 执行

js

体验AI代码助手

代码解读

复制代码

axios.get('/static/mock/index.json') .then(this.getHomeInfoSuccess)

上线前,再改成

js

体验AI代码助手

代码解读

复制代码

axios.get('/api/index.json?city=' + this.city)

真麻烦,万一忘了,很烦。还好 Vue 帮解决这问题。修改脚手架文件:index.js

js

体验AI代码助手

代码解读

复制代码

'use strict' // Template version: 1.3.1 // see http://vuejs-templates.github.io/webpack for documentation. const path = require('path') module.exports = { dev: { // Paths assetsSubDirectory: 'static', assetsPublicPath: '/', /** * webpack-dev-server 提供的功能 * * /api开头的请求代理到http://localhost:8080/static/mock * proxyTable是一个对象,用于配置代理规则 * '/api'是代理规则的路径,表示所有以/api开头的请求都会被代理 * target是代理的目标地址,即将请求转发到的地址 * pathRewrite是路径重写规则,用于将请求路径中的'/api'替换成'/static/mock' */ proxyTable: { '/api': { target: 'http://localhost:8080', pathRewrite: { '^/api': '/static/mock' } } },

改变了配置项,所以需要重启服务:

可见,请求成功,拿到数据了:

4 总结

功能强大的 js 库,可发送 AJAX 请求。在 Vue 中使用 Axios 可轻松与服务器进行通信,并从服务器获取数据。

作者:imtoken
链接:https://www.chinaqicheng.com/post/750115328180156221459
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值