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.…

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

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

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

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

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

机器学习 啤酒数据集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),是…

ER TO SQL语句

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

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

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

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…

HTML和CSS面试问题总结,html和css面试总结

html和cssw3c 规范结构化标准语言样式标准语言行为标准语言1) 盒模型常见的盒模型有w3c盒模型(又名标准盒模型)box-sizing:content-box和IE盒模型(又名怪异盒模型)box-sizing:border-box。标准盒子模型:宽度内容的宽度(content) border padding margin低版本IE盒子…

山师计算机专业研究生怎么样,山东师范大学有计算机专业硕士吗?

山东师范大学位于山东省济南市,学校是一所综合性高等师范院校。该院校深受广大报考专业硕士学员的欢迎,因此很多学员想要知道山东师范大学有没有计算机专业硕士?山东师范大学是有计算机专业硕士的。下面就和大家介绍一下培养目标有哪些&#…

使用TensorFlow概率预测航空乘客人数

TensorFlow Probability uses structural time series models to conduct time series forecasting. In particular, this library allows for a “scenario analysis” form of modelling — whereby various forecasts regarding the future are made.TensorFlow概率使用结构…

python画激活函数图像

导入必要的库 import math import matplotlib.pyplot as plt import numpy as np import matplotlib as mpl mpl.rcParams[axes.unicode_minus] False 绘制softmax函数图像 fig plt.figure(figsize(6,4)) ax fig.add_subplot(111) x np.linspace(-10,10) y sigmoid(x)ax.s…

pdf.js插件使用记录,在线打开pdf

pdf.js插件使用记录,在线打开pdf 原文:pdf.js插件使用记录,在线打开pdf天记录一个js库:pdf.js。主要是实现在线打开pdf功能。因为项目需求需要能在线查看pdf文档,所以就研究了一下这个控件。 有些人很好奇,在线打开pdf…

程序员 sql面试_非程序员SQL使用指南

程序员 sql面试Today, the word of the moment is DATA, this little combination of 4 letters is transforming how all companies and their employees work, but most people don’t really know how data behaves or how to access it and they also think that this is j…

r a/b 测试_R中的A / B测试

r a/b 测试什么是A / B测试? (What is A/B Testing?) A/B testing is a method used to test whether the response rate is different for two variants of the same feature. For instance, you may want to test whether a specific change to your website lik…