一、axios

【应用】进行请求和传表单

【axios中文档】:https://www.kancloud.cn/yunye/axios/234845

【vue-axios】:https://cn.vuejs.org/v2/cookbook/using-axios-to-consume-apis.html

【参考】:https://blog.csdn.net/u010132177/article/details/103116767

1.1 安装axios

进入项目目录,运行cmd,运行如下代码:

  1. npm install --save axios

运行项目:

  1. npm run dev

1.2 挂载axios到$axios写法(get)

第一步 src/main.js

【1】引入axios为 Axios

【2】挂载Axios到 $axios (使用其内部函数时:this.$Axios即可)

  1. // The Vue build version to load with the `import` command
  2. // (runtime-only or standalone) has been set in webpack.base.conf with an alias.
  3. import Vue from 'vue'
  4. import App from './App'
  5. import Axios from "axios" //【1】引入axios
  6. Vue.prototype.$axios = Axios //【2】挂载Axios到 $axios (使用其内部函数时:this.$Axios即可)
  7. Vue.config.productionTip = false
  8. /* eslint-disable no-new */
  9. new Vue({
  10. el: '#app', //[1]:在index.html里id为#app标签里写入组件内容
  11. components: { App },//[2]:写入的组件
  12. template: '<App/>' //[3]:写入的模板名(也可看成一个完整组件)
  13. })

第二步 parent.vue

  1. <template>
  2. <div class="parent">
  3. <!-- 【2】把获取到的数据循环展现出来 -->
  4. <ul>
  5. <li v-for="v in list">{{v.title}}</li>
  6. </ul>
  7. <hr/>【显示获取到的请求】<hr/>
  8. {{list}}
  9. </div>
  10. </template>
  11. <script>
  12. //import axios from 'axios' //首先导入安装好的axios
  13. export default{
  14. name:'parent',
  15. components:{},
  16. data(){
  17. return{
  18. list:[] //定义一个空数组用于存放接收到的数据
  19. }
  20. },
  21. //【1】生命周期函数,组件安装好后调用此函数
  22. mounted (){
  23. let api="http://www.phonegap100.com/appapi.php?a=getPortalList&catid=20";
  24. this.$axios //对应main.js里挂载写法
  25. .get(api)
  26. .then(res=> {
  27. console.log(res);
  28. this.list=res.data.result;
  29. })
  30. .catch(error=>{
  31. console.log(error);
  32. })
  33. },
  34. filters:{},
  35. directives:{},
  36. }
  37. </script>
  38. <style scoped>
  39. </style>

效果:

【国内首家】微信小程序视频教程免费下载

ionic域资源共享 CORS 详解

移动端触摸滑动js插件_html5手机端轮播插件

未来程序员会被机器人取代吗?

锤子安全锤_锤子真的出了个“锤子”:车充+安全锤

html5能做什么_html5能做哪些开发?

平安口袋银行App采用-Cordova混合开发

JavaScript Emoji 表情库_js 类似于qq微信的表情库

cordova热更新插件-不发布应用市场动态更新APP源码

央行新规!支付宝、微信用户别忘做这件事

HTML5 移动app开发框架该如何选择

纯CSS3动画按钮效果,可用于移动wap app开发

京东每天亏上亿_不会抄袭、剽窃?必将死在互联网下一站的起点上! ...

ionic react-native和native开发移动app那个好

这12行代码分分钟让你电脑崩溃手机重启

罗振宇罗永浩雷军们的演讲 你喜欢哪一个

ionic-native-transitions让你的Ionic应用比原生还快

ionic 1.2.4 发布,最好的html5移动app开发框架

phonegap发布应用到appstore

HTML5仿苹果应用的动画

【显示获取到的请求】

[ { "aid": "499", "catid": "20", "username": "admin", "title": "【国内首家】微信小程序视频教程免费下载", "pic": "portal/201610/13/211832yvlbybpl3rologrr.jpg", "dateline": "1476364740" }, { "aid": "498", "catid": "20", "username": "admin", "title": "ionic域资源共享 CORS 详解", "pic": "", "dateline": "1472952906" }, { "aid": "497", "catid": "20", "username": "admin", "title": "移动端触摸滑动js插件_html5手机端轮播插件", "pic": "portal/201606/28/211604ullzo5arr4iurnum.jpg", "dateline": "1467119820" }, { "aid": "496", "catid": "20", "username": "admin", "title": "未来程序员会被机器人取代吗?", "pic": "portal/201606/02/221818eafffffm4srfdf4s.jpg", "dateline": "1464874140" }, { "aid": "495", "catid": "20", "username": "admin", "title": "锤子安全锤_锤子真的出了个“锤子”:车充+安全锤", "pic": "portal/201605/20/213752f6i56f1e0hbfzhkb.jpg", "dateline": "1463751505" }, { "aid": "494", "catid": "20", "username": "admin", "title": "html5能做什么_html5能做哪些开发?", "pic": "", "dateline": "1463664540" }, { "aid": "493", "catid": "20", "username": "admin", "title": "平安口袋银行App采用-Cordova混合开发", "pic": "", "dateline": "1463294580" }, { "aid": "492", "catid": "20", "username": "admin", "title": "JavaScript Emoji 表情库_js 类似于qq微信的表情库", "pic": "portal/201604/25/084907r2e3im3dvd1q3f7z.jpg", "dateline": "1461545392" }, { "aid": "491", "catid": "20", "username": "admin", "title": "cordova热更新插件-不发布应用市场动态更新APP源码", "pic": "portal/201604/12/152638zaxz5xz3t58bfts2.png", "dateline": "1460446140" }, { "aid": "490", "catid": "20", "username": "admin", "title": "央行新规!支付宝、微信用户别忘做这件事", "pic": "portal/201603/29/144942tcnnenueefagukfk.jpg", "dateline": "1459234206" }, { "aid": "471", "catid": "20", "username": "admin", "title": "HTML5 移动app开发框架该如何选择", "pic": "portal/201511/15/163112q4kz6k2rgcgpi1tc.jpg", "dateline": "1457771160" }, { "aid": "488", "catid": "20", "username": "admin", "title": "纯CSS3动画按钮效果,可用于移动wap app开发", "pic": "portal/201603/09/202742r1kngyt17na7n1nk.jpg", "dateline": "1457526780" }, { "aid": "487", "catid": "20", "username": "admin", "title": "京东每天亏上亿_不会抄袭、剽窃?必将死在互联网下一站的起点上! ...", "pic": "portal/201603/02/155825h28zxs2vsxjccv4c.jpg", "dateline": "1456905746" }, { "aid": "486", "catid": "20", "username": "admin", "title": "ionic react-native和native开发移动app那个好", "pic": "portal/201602/25/193433dtzfvlzl1oavhljy.jpg", "dateline": "1456398960" }, { "aid": "484", "catid": "20", "username": "admin", "title": "这12行代码分分钟让你电脑崩溃手机重启", "pic": "", "dateline": "1453426595" }, { "aid": "483", "catid": "20", "username": "admin", "title": "罗振宇罗永浩雷军们的演讲 你喜欢哪一个", "pic": "", "dateline": "1452226800" }, { "aid": "482", "catid": "20", "username": "admin", "title": "ionic-native-transitions让你的Ionic应用比原生还快", "pic": "portal/201601/07/135529z4r7gwglv4rw8l74.jpeg", "dateline": "1452145500" }, { "aid": "481", "catid": "20", "username": "admin", "title": "ionic 1.2.4 发布,最好的html5移动app开发框架", "pic": "portal/201601/05/132107h9bllr7li74zoh49.jpg", "dateline": "1451971293" }, { "aid": "480", "catid": "20", "username": "admin", "title": "phonegap发布应用到appstore", "pic": "portal/201601/05/122115yhh22i77sqn2ijc6.jpg", "dateline": "1451967910" }, { "aid": "479", "catid": "20", "username": "admin", "title": "HTML5仿苹果应用的动画", "pic": "portal/201601/04/220252ycyddectvivr55pq.png", "dateline": "1451916189" } ]

1.3直接导入到组件axios写法(get)

把main.js里的注释掉

  1. //import Axios from "axios"
  2. //Vue.prototype.$axios = Axios

parent.vue

【0】首先导入安装好的axios

【1】重点:生命周期函数,组件安装好后调用此函数(真正用axios获取数据部分)

【2】把获取到的数据循环展现出来

  1. <template>
  2. <div class="parent">
  3. <!-- 【2】把获取到的数据循环展现出来 -->
  4. <ul>
  5. <li v-for="v in list">{{v.title}}</li>
  6. </ul>
  7. <hr/>【显示获取到的请求】<hr/>
  8. {{list}}
  9. </div>
  10. </template>
  11. <script>
  12. import axios from 'axios' //【0】首先导入安装好的axios
  13. export default{
  14. name:'parent',
  15. components:{},
  16. data(){
  17. return{
  18. list:[] //【0.1】定义一个空数据用来存放接收到的数据
  19. }
  20. },
  21. //【1】生命周期函数,组件安装好后调用此函数
  22. mounted (){
  23. let api="http://www.phonegap100.com/appapi.php?a=getPortalList&catid=20";
  24. axios
  25. .get(api)
  26. .then(res=> { // 简略写法原:res参数省略了括号.then((res)=>{....})
  27. console.log(res);
  28. this.list=res.data.result;
  29. })
  30. .catch(error=>{
  31. console.log(error);
  32. })
  33. },
  34. filters:{},
  35. directives:{},
  36. }
  37. </script>
  38. <style scoped>
  39. </style>

效果同1.2

1.3.1 把请求参数单独提出来写法(get)

效果同上例

parent.vue 中的请求部分,其它略过

api接口:http://www.phonegap100.com/appapi.php?a=getPortalList&catid=20

  1. //【1】生命周期函数,组件安装好后调用此函数
  2. mounted (){
  3. let api="http://www.phonegap100.com/appapi.php";
  4. let params={a:"getPortalList",catid:20} //【1】把参数提到此处
  5. this.$axios
  6. .get(api,{params:params}) //【2】get加上参数
  7. .then(res=> {
  8. console.log(res);
  9. this.list=res.data.result;
  10. })
  11. .catch(error=>{
  12. console.log(error);
  13. })
  14. }

效果同1.2例

1.3 axios的post

1.3.1post简单写法

  1. //form-data:?name=iwen&age=20
  2. //x-www-form-urlencoded:{name:"iwen",age:20}
  3. //注意:axios接受的post请求参数的格式是form-data格式
  4. import axios from "axios"
  5. import qs from "qs" //node.js的一个库用于把post之类的参数转换成需要的格式
  6. axios.post("http://www.wwtliu.com/sxtstu/blueberrypai/login.php", qs.stringify({
  7. user_id:"iwen@qq.com",
  8. password:"iwen123",
  9. verification_code:"crfvw"
  10. }))
  11. .then(res => {
  12. console.log(res.data)
  13. })
  14. .catch(error => {
  15. console.log(error);
  16. })

1.3.2使用全局变量axios的post写法

  1. axios.defaults.baseURL = 'https://api.example.com';
  2. axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
  3. axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

main.js

  1. // The Vue build version to load with the `import` command
  2. // (runtime-only or standalone) has been set in webpack.base.conf with an alias.
  3. import Vue from 'vue'
  4. import App from './App'
  5. import Axios from "axios"
  6. import qs from "qs"
  7. Vue.prototype.$axios = Axios
  8. Vue.prototype.HOST = '/api'
  9. Axios.defaults.baseURL = 'http://www.wwtliu.com'; //定义全局变量
  10. Axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
  11. Vue.config.productionTip = false
  12. /* eslint-disable no-new */
  13. new Vue({
  14. el: '#app',
  15. template: '<App/>',
  16. components: {
  17. App
  18. }
  19. })

post.js

  1. <template>
  2. <div>
  3. post
  4. </div>
  5. </template>
  6. <script>
  7. import qs from "qs" //node.js的一个库,用于对post之类的参数进行转换成需要的类型
  8. export default{
  9. name:"posts",
  10. data(){
  11. return{
  12. }
  13. },
  14. created(){
  15. var url = this.HOST + "/login";
  16. console.log(url);
  17. this.$axios.post(url, {
  18. username:"iwen",
  19. password:"helloiwen"
  20. })
  21. .then(res => {
  22. console.log(res.data)
  23. })
  24. .catch(error => {
  25. console.log(error);
  26. })
  27. }
  28. }
  29. </script>
  30. <style>
  31. </style>

效果:将成功登录对应网站

1.4 拦截器

【作用】:在请求或响应被 then 或 catch 处理前拦截它们。

mian.js

通过拦截器对发送之前数据处理,把格式不对的转化成正确的,在组件中就不用再处理了。

  1. // The Vue build version to load with the `import` command
  2. // (runtime-only or standalone) has been set in webpack.base.conf with an alias.
  3. import Vue from 'vue'
  4. import App from './App'
  5. import Axios from "axios"
  6. import qs from "qs"
  7. Vue.prototype.$axios = Axios
  8. Vue.prototype.HOST = '/api'
  9. // Axios.defaults.baseURL = 'http://www.wwtliu.com';
  10. // Axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
  11. Vue.config.productionTip = false
  12. // 添加请求拦截器
  13. Axios.interceptors.request.use(function(config) {
  14. if (config.method == "post") {//如果请求为post,则把其参数格式进行qs.stringify处理
  15. config.data = qs.stringify(config.data)
  16. }
  17. return config;
  18. }, function(error) {
  19. // 对请求错误做些什么
  20. return Promise.reject(error);
  21. });
  22. // 添加响应拦截器
  23. Axios.interceptors.response.use(function(response) {
  24. return response;
  25. }, function(error) {
  26. // 对响应错误做点什么
  27. return Promise.reject(error);
  28. });
  29. /* eslint-disable no-new */
  30. new Vue({
  31. el: '#app',
  32. template: '<App/>',
  33. components: {
  34. App
  35. }
  36. })

post.vue

在全局中用拦截器处理数据,在组件中直接用即可,就不用进行处理参数,引用qs.stringfiy(注释部分)处理了

  1. <template>
  2. <div>
  3. post
  4. </div>
  5. </template>
  6. <script>
  7. export default{
  8. name:"posts",
  9. data(){
  10. return{
  11. }
  12. },
  13. created(){
  14. // var url = this.HOST + "/login";
  15. // console.log(url);
  16. // this.$axios.post(url, {
  17. // username:"iwen",
  18. // password:"helloiwen"
  19. // })
  20. // .then(res => {
  21. // console.log(res.data)
  22. // })
  23. // .catch(error => {
  24. // console.log(error);
  25. // })
  26. var url = this.HOST + "/movie/top250";
  27. this.$axios.get(url,{
  28. params:{
  29. count:10,
  30. start:0
  31. }
  32. })
  33. .then(res => {
  34. console.log(res.data)
  35. })
  36. .catch(error => {
  37. console.log(error);
  38. })
  39. }
  40. }
  41. </script>
  42. <style></style>

1.5 跨域解决方案

修改config index.js文件、host文件

【修改完成后,重新运行项目才会生效:(关闭cmd,重新,npm run dev)】

  1. proxyTable: {
  2. "/api": {
  3. target: "http://localhost:3000",
  4. changeOrigin: true,
  5. pathRewrite: {
  6. '^/api': ''
  7. }
  8. }
  9. }
  10. 添加host
  11. Vue.prototype.HOST = '/api'
  12. 【注意】:此种跨域解决方案,只能适用于测试阶段,打包的时候,不会具备服务器不能跨域了,后端解决。

1.6 Mock:数据模拟

  1. 1.自己创建JSON文件。使用get请求形式访问数据
  2. 优点:方便,快捷
  3. 缺点:只能存在get请求
  4. 2.项目中集成服务器,模拟各种接口
  5. 优点:模拟真实线上环境
  6. 缺点:增加开发成本
  7. 3.直接使用线上数据
  8. 优点:真实
  9. 缺点:不一定每个项目都存在
  10. 4.数据模拟库
  11. www.mockjs.com
  12. https://github.com/nuysoft/Mock/wiki/Getting-Started

五、Vue:使用axios库进行get和post、用拦截器对请求和响应进行预处理、Mock(数据模拟)的更多相关文章

  1. vue+vuex+axios实现登录、注册页权限拦截

    1.修改config文件夹里的dev.env.js里的BASE_API,把地址改成请求后端的公共部分 1 BASE_API: '"http://192.168.xx.xx"', 2 ...

  2. vue 路由拦截器和请求拦截器

    路由拦截器 已路由为导向 router.beforeEach((to,from,next)=>{ if(to.path=='/login' || localStorage.getItem('to ...

  3. vue+axois 封装请求+拦截器(请求锁+统一错误)

     需求 封装常用请求 拦截器-请求锁 统一处理错误码 一.封装常用的请求 解决痛点:不要每一个模块的api都还要写get,post,patch请求方法.直接将这些常用的方法封装好. 解决方案:写一个类 ...

  4. 第五篇 基于.net搭建热插拔式web框架(拦截器---请求管道)

    好了,前边我们把核心内容介绍完了,接下来要做的就是拦截用户的请求,并把请求转向沙箱内. 这里我们准备通过实现一个HttpModule类来完成请求的拦截与转发.新建一个HuberHttpModule类, ...

  5. 细说vue axios登录请求拦截器

    当我们在做接口请求时,比如判断登录超时时候,通常是接口返回一个特定的错误码,那如果我们每个接口都去判断一个耗时耗力,这个时候我们可以用拦截器去进行统一的http请求拦截. 1.安装配置axios cn ...

  6. VUE 数据请求和响应(axios)

    1. 概述 1.1 简介 axios是一个基于Promise(本机支持ES6 Promise实现) 的HTTP库,用于浏览器和 nodejs 的 HTTP 客户端.具有以下特征: 从浏览器中创建 XM ...

  7. vue中Axios的封装和API接口的管理

    前端小白的声明: 这篇文章为转载:主要是为了方便自己查阅学习.如果对原博主造成侵犯,我会立即删除. 转载地址:点击查看 如图,面对一团糟代码的你~~~真的想说,What F~U~C~K!!! 回归正题 ...

  8. 前后端数据交互(五)——什么是 axios?

    一.什么是 axios ? axios是基于 Promise 的 ajax 封装库,也是前端目前最流行的 ajax 请求库.简单地说发送 get.post 请求,是一个轻量级的库,使用时可直接引入. ...

  9. vue axios请求/响应拦截器

    // main.js中配置 // 引入 axios import Axios from 'axios' // 这时候如果在其它的组件中,是无法使用 axios 命令的. // 但如果将 axios 改 ...

随机推荐

  1. js运算符的特殊应用

    是否包含指定字符: ~ 取整: | 取半: >> 成长值评级: || 判断奇偶: & 交换两个数字的值: ^= 2的n次方: << 和 ** 1 << n- ...

  2. cookie、session、localStorage、sessionStorage的区别

    cookie的机制 cookie是存储在用户本地终端上的数据.有时也用cookies,指某些网站为了辨别用户身份,进行session跟踪而存储在本地终端上的数据,通常经过加密. Cookie是服务器发 ...

  3. 题解 JSOI2010 找零钱的洁癖

    题解 JSOI2010 找零钱的洁癖 题面 BZOJ 个人体会 van全没有思路... 只能去看题解... 还是个bfs+贪心 不管怎样竟然乱搞过了... 听M_sea小姐姐说她有更正经的做法(线性规 ...

  4. 由Nginx反向代理引出的JCaptcha验证码验证失败的问题

    搜索关键字: 1)Windows本地开发正常,部署到Linux远程服务器上JCaptcha验证失败 2)Linux远程服务器上JCpatcha验证失败 3)Nginx反向代理后JCaptcha验证失败 ...

  5. Hadoop大实验——MapReduce的操作

    日期:2019.10.30 博客期:114 星期三 实验6:Mapreduce实例——WordCount   实验说明: 1.          本次实验是第六次上机,属于验证性实验.实验报告上交截止 ...

  6. div背景图片自适应

    对背景图片设置属性:background-size:cover;可以实现背景图片适应div的大小. background-size有3个属性: auto:当使用该属性的时候,背景图片将保持100% 的 ...

  7. PowerHandle管理页面

    HljioGBjiomGiiuHJKYiubfcgydftyjkKHKHIUvghcghftyfhkHJKGHJKguyjljklhJKGUYGUYhjklhfgtydtyGHJgHJUGuy HKk ...

  8. MyBatis模糊查询异常: '%${}''读取jdbc属性

    '%${}''总是传root, 后来发现${username}读取了jdbc里面的属性username,于是将jdbc属性名修改,成功

  9. [Database] MAC MySQL中文乱码问题

    1 确保数据库编码设置, 可修改my.cnf mysql> show variables like '%character%'; +--------------------------+---- ...

  10. Django:邮件功能实现

    django-users2和django的邮件功能模块都有相关的实现 ----------------------------------------------------------------- ...