axios异步请求数据的简单使用

使用Mock模拟好后端数据之后(Mock模拟数据的使用参考:https://segmentfault.com/a/11...),就需要尝试请求加载数据了。数据请求选择了axios,现在都推荐使用axios。

axios(https://github.com/axios/axios)是基于 promise 的 HTTP 库。如官网文档介绍,npm i 之后,在需要的组件中加载就可以了。个人认为,编码的魅力在于,解决问题的方法不止一种,有时候这个方法在你的开发环境下ok,在我的开发环境下却不ok,所以,问题是各式各样的,而解决问题的方法也是百花齐放的。

axios的入门

1、安装

npm i axios -S

2、引入

在src目录下新建apis.js文件(项目逐渐完善的过程中会有很有个api接口,当然也可以命名为axios.js,命名是为了让别人看懂),并引入:import axios from 'axios';之后,编辑apis.js文件,考虑封装axios.get或post请求

3、apis.js文件的编辑

import axios from 'axios';
const Domain = "http://localhost:8080";  // 定义根域名
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; // 设置post提交数据的格式// 封装 post 请求
export function post(action, params){return new Promise((resolve, reject) => {// url 判断是测试环境 就要拿 测试环境的域名, 正式环境的就要用 正式域名let url = Domain + action;axios.post(url, params).then(response => {resolve(response.data)}).catch(error => {reject(error)})});
}// 封装 get 请求export function get(action, params){return new Promise((resolve, reject) => {axios.get(Domain + action, params).then(response => {resolve(response.data)}).catch(error => {reject(error)})});
}export default {postData(action, params){return post(action, params)},getData(action, params){return get(action, params)}
}

4、在需要的组件中进行引用

 import api from '../../apis.js';export default {name: "banner",data() {return {bannerList: []};},created(){this.getBanner(); // 在页面渲染完成即加载},methods: {getBanner(){this.$api.getData('/getBanner').then(val => {this.bannerList = val.imgs;});}}
}

5、全局配置axios

很多组件都需要请求数据,每用一次导入一次很麻烦,全局配置之后就不用在组件中导入了。


在入口文件main.js中引入,之后挂在vue的原型链上:import api from './apis.js';
Vue.prototype.$http = api;在组件中使用:getBanner(){this.$http.getData('/getBanner').then(val => {this.bannerList = val.imgs;});}

6、axios结合vuex(在项目中还没用到,如果有问题,欢迎指正)

在vuex的仓库文件store.js中引用,使用action添加方法。action 可以包含异步操作,而且可以通过 action 来提交 mutations。action有一个固有参数context,但是 context 是 state 的父级,包含state、getters

import Vue from 'Vue'
import Vuex from 'vuex'
import axios from 'axios'Vue.use(Vuex)
export default new Vuex.Store({// 定义状态state: {banners: {name: 'pic'}},actions: {// 封装一个 ajax 方法saveBanner (context) {axios({method: 'get',url: '/getBanner',data: context.state.banners})}}
})

在组件中发送请求的时候,需要使用 this.$store.dispatch 来分发

methods: {getBananer() {this.$store.dispatch('saveBanner')  // actions里的方法名}
}

异步加载的几种方法

1、$.ajax( url[, settings])

url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址。
type: 要求为String类型的参数,请求方式(post或get)默认为get。
data:规定要发送到服务器的数据。
async:布尔值,表示请求是否异步处理。默认是 true。
dataType: 要求为String类型的参数,预期服务器返回的数据类型。
contentType:要求为String类型的参数,当发送信息至服务器时,内容编码类型默认为"application/x-www-form-urlencoded"。
success:要求为Function类型的参数,请求成功后调用的回调函数。
error:Function类型的参数,请求失败后调用的回调函数。
jsonp:在一个 jsonp 中重写回调函数的字符串。

$(function(){$('#send').click(function(){$.ajax({type: "GET",url: "test.json",data: {username:$("#username").val(), content:$("#content").val()},dataType: "json",success: function(data){// handle success}error: function(data){// handle error}jsonp: ""});});});

2、$.ajax 的跨域请求问题

当Ajax请求的url不是本地或者同一个服务器的地址时,浏览器会报一个错误:No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin…………由于浏览器的安全机制,不能调用不同服务器下的url地址。基于此,jQuery.ajax给出了jsonp的解决方案: 把服务器返回的数据类型设置为jsonp。

 $(function(){$('#send').click(function(){$.ajax({type: "GET",url: "test.json",data: {username:$("#username").val(), content:$("#content").val()},dataType: "jsonp",   // jsonp格式success: function(data){// handle success}error: function(data){// handle error}jsonp: "callback"});});});

但是,jsonp是一种非官方的方法,而且这种方法只支持get请求,不如post请求安全。此外,jsonp需要服务器配合,如果是访问的是第三方服务器,我们没有修改服务器的权限,那么这种方式是不可行的。

3、vue框架中的vue-resource

ue-resource是Vue.js的一款插件,它可以通过XMLHttpRequest或JSONP发起请求并处理响应。vue-resource体积小,支持主流浏览器。不过,vue2.0之后就不再更新了,尤大神推荐使用axios。

{// GET /someUrlthis.$http.get('/someUrl').then(response => {// get body datathis.someData = response.body;}, response => {// error callback});
}

全局配置post提交数据的格式:

Vue.http.options.emulateJSON = true;

全局配置根路径:

Vue.http.options.root = 'http://localhost:8080';

4、vue-resource的跨域请求问题

同样地,由于浏览器的安全机制,vue-resource也面临着跨域请求的问题。解决方案如下:在vue项目下的 config/index.js 文件里面配置代理proxyTable:

dev: {// PathsassetsSubDirectory: 'static',assetsPublicPath: '/',proxyTable: {    // 新增,解决跨域请求问题'/api': {target: 'http://192.168.1.103:8080/',changeOrigin: true,pathRewrite: {'`/api': '/'}},secure: false},target中写你想要请求数据的地址的域名

4、axios跨域请求的问题

与vue-resource一样,在vue项目下的 config/index.js 文件里面配置代理proxyTable:

 dev: {// PathsassetsSubDirectory: 'static',assetsPublicPath: '/',proxyTable: {    // 新增,解决跨域请求问题'/api': {target: 'http://192.168.1.103:8080/',changeOrigin: true,pathRewrite: {'`/api': '/'}},secure: false},

不过vue-resource和axios这两个方法,可能配置了代理proxyTable还是会报:No 'Access-Control-Allow-Origin' header is present on ……的问题,这需要后端服务器配合设置:

 header("Access-Control-Allow-Origin", "*");header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");

emmmm,总感觉自己还是有点懵 233

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/388502.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

float在html语言中的用法,float属性值包括

html中不属于float常用属性值的是float常用的值就三个:left\right\none。没有其他的值了。 其中none这个值是默认的,所以一般不用写。css中float属性有几种用法?值 描述left 元素向左浮动。 right 元素向右浮动。 none 默认值。元素不浮动,并…

它们是什么以及为什么我们不需要它们

Once in a while, when reading papers in the Reinforcement Learning domain, you may stumble across mysterious-sounding phrases such as ‘we deal with a filtered probability space’, ‘the expected value is conditional on a filtration’ or ‘the decision-mak…

LoadRunner8.1破解汉化过程

LR8.1版本已经将7.8和8.0中通用的license封了,因此目前无法使用LR8.1版本,包括该版本的中文补丁。 破解思路:由于软件的加密程序和运行的主程序是分开的,因此可以使用7.8的加密程序覆盖8.1中的加密程序,这样老的7.8和…

TCP/IP网络编程之基于TCP的服务端/客户端(二)

回声客户端问题 上一章TCP/IP网络编程之基于TCP的服务端/客户端(一)中,我们解释了回声客户端所存在的问题,那么单单是客户端的问题,服务端没有任何问题?是的,服务端没有问题,现在先让…

谈谈iOS获取调用链

本文由云社区发表iOS开发过程中难免会遇到卡顿等性能问题或者死锁之类的问题,此时如果有调用堆栈将对解决问题很有帮助。那么在应用中如何来实时获取函数的调用堆栈呢?本文参考了网上的一些博文,讲述了使用mach thread的方式来获取调用栈的步…

python 移动平均线_Python中的移动平均线

python 移动平均线There are situations, particularly when dealing with real-time data, when a conventional average is of little use because it includes old values which are no longer relevant and merely give a misleading impression of the current situation.…

Ireport制作过程

Ireport制作过程 1、首先要到Option下设置一下ClassPath添加文件夹 2、到预览->报表字段设置一下将要用到的字段 3、到编辑->查询报表->写sql语句,然后把语句查询的字段结果与上面设置的报表字段的名要对应上 4、Option->选项->Compiler设置一下…

2018.09.16 loj#10243. 移棋子游戏(博弈论)

传送门 题目中已经给好了sg图&#xff0c;直接在上面跑出sg函数即可。 最后看给定点的sg值异或和是否等于0就判好了。 代码&#xff1a; #include<bits/stdc.h> #define N 2005 #define M 6005 using namespace std; int n,m,k,sg[N],first[N],First[N],du[N],cnt0,an…

html5字体的格式转换,font字体

路由器之家网今天精心准备的是《font字体》&#xff0c;下面是详解&#xff01;html中的标签是什么意思HTML提供了文本样式标记&#xff0c;用来控制网页中文本的字体、字号和颜色&#xff0c;多种多样的文字效果可以使网页变得更加绚丽。其基本语法格式&#xff1a;文本内容fa…

红星美凯龙牵手新潮传媒抢夺社区消费市场

瞄准线下流量红利&#xff0c;红星美凯龙牵手新潮传媒抢夺社区消费市场 中新网1月14日电 2019年1月13日&#xff0c;红星美凯龙和新潮传媒战略合作发布会在北京召开&#xff0c;双方宣布建立全面的战略合作伙伴关系。未来&#xff0c;新潮传媒的梯媒产品将入驻红星美凯龙的全国…

机器学习 啤酒数据集_啤酒数据集上的神经网络

机器学习 啤酒数据集Artificial neural networks (ANNs), usually simply called neural networks (NNs), are computing systems vaguely inspired by the biological neural networks that constitute animal brains.人工神经网络(ANN)通常简称为神经网络(NNs)&#xff0c;是…

实例演示oracle注入获取cmdshell的全过程

以下的演示都是在web上的sql plus执行的&#xff0c;在web注入时 把select SYS.DBMS_EXPORT_EXTENSION.....改成   /xxx.jsp?id1 and 1<>a||(select SYS.DBMS_EXPORT_EXTENSION.....)   的形式即可。(用" a|| "是为了让语句返回true值)   语句有点长…

html视频位置控制器,html5中返回音视频的当前媒体控制器的属性controller

实例检测该视频是否有媒体控制器&#xff1a;myViddocument.getElementById("video1");alert("Controller: " myVid.controller);定义和用法controller 属性返回音视频的当前媒体控制器。默认地&#xff0c;音视频元素不会有媒体控制器。如果规定了媒体控…

ER TO SQL语句

ER TO SQL语句的转换&#xff0c;在数据库设计生命周期的位置如下所示。 一、转换的类别 从ER图转化得到关系数据库中的SQL表&#xff0c;一般可分为3类&#xff1a; 1&#xff09;转化得到的SQL表与原始实体包含相同信息内容。该类转化一般适用于&#xff1a; 二元“多对多”关…

dede 5.7 任意用户重置密码前台

返回了重置的链接&#xff0c;还要把&amp删除了&#xff0c;就可以重置密码了 结果只能改test的密码&#xff0c;进去过后&#xff0c;这个居然是admin的密码&#xff0c;有点头大&#xff0c;感觉这样就没有意思了 我是直接上传的一句话&#xff0c;用菜刀连才有乐趣 OK了…

nasa数据库cm1数据集_获取下一个地理项目的NASA数据

nasa数据库cm1数据集NASA provides an extensive library of data points that they’ve captured over the years from their satellites. These datasets include temperature, precipitation and more. NASA hosts this data on a website where you can search and grab in…

注入代码oracle

--建立类 select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES(FOO,BAR,DBMS_OUTPUT".PUT(:P1);EXECUTE IMMEDIATE DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE  create or replace and compile java source named "LinxUtil" as …

html5包含inc文件,HTML中include file标签的用法

参数PathType将 FileName 的路径类型。路径可为以下某种类型&#xff1a;路径类型 含义文件 该文件名是带有 #include 命令的文档所在目录的相对路径。被包含文件可位于相同目录或子目录中&#xff1b;但它不能处于带有 #include 命令的页的上层目录中。虚拟 文件名为 Web 站点…

r语言处理数据集编码_在强调编码语言或工具之前,请学习这3个基本数据概念

r语言处理数据集编码重点 (Top highlight)I got an Instagram DM the other day that really got me thinking. This person explained that they were a data analyst by trade, and had years of experience. But, they also said that they felt that their technical skill…

springboot微服务 java b2b2c电子商务系统(一)服务的注册与发现(Eureka)

一、spring cloud简介spring cloud 为开发人员提供了快速构建分布式系统的一些工具&#xff0c;包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。它运行环境简单&#xff0c;可以在开发人员的电脑上跑。Spring Cloud大型企业分布式…