Vue-Ajax核心知识整理

在Vue框架中可以有很多方式实现 ajax, 其中有xhr、jQuery、fetch、axios、vue-resource, 其中Vue的作者尤雨溪推荐使用axios,所以在使用Vue框架时,尽量还是使用axios

但是当我们使用ajax时,经常会遇到跨域的问题,比如你本地的端口号是8080, 而服务器的端口号是5050,当你向服务器请求数据时,就会存在跨域的问题。

跨域也有很多的解决方案:

【1】cors方法:不需要前端人员操作,只需要后端人员在写服务器的时候,给你返回响应的时候,会加几个特殊的响应头;

【2】jsonp: 需要后端人员和前端人员都进行相应的操作,不常用  <script src=""></script> 只能解决 GET 请求的跨域问题,其它的请求方式解决不了。

【3】代理 proxy: 在Vue框架中经常使用

因为服务器和服务器之间的数据传输并不是用的ajax,仅仅用的是http,所以不存在跨域的问题,这样本地端口向代理服务器发起请求,而代理服务器目标服务器请求,这样就解决了跨域问题。

1 配置代理服务器

在vue.config.js 中配置

  // 1. 开启代理服务器,解决跨域问题(方式一)devServer: {proxy: 'http://localhost:5000'  // 需要转发的服务器的端口},// 2.开启代理服务器(方式二)devServer: {proxy: {'/api': {   // /api为请求前缀,想要走代理,就在请求的地址前面加上/api,前缀可以根据需要更改target: '<url>',  // <url> 为请求的目标地址,比如:http://localhost:5000pathRewrite: {'^/api': ''  // 去掉请求路径中的/api},ws: true,  // 用于支持websocketchangeOrigin: true   // 用于控制请求头中host值},// 配置多个'/api2': {   // /api为请求前缀,想要走代理,就在请求的地址前面加上/api,前缀可以根据需要更改target: '<url>',  // <url> 为请求的目标地址,比如:http://localhost:5000pathRewrite: {'^/api': ''  // 去掉请求路径中的/api},ws: true,  // 用于支持websocketchangeOrigin: true   // 用于控制请求头中host值}, // 配置多个...// '/foo': {//   target: '<other_url>'// }}}

 

建议使用方式2,可以配置多个代理服务器,还有一个问题就是当请求的资源本地有时,会优先读取本地得信息,不会走代理,这样就不会读取到服务器中真实的信息。所以如果想要指定走代理的话,需要指定请求前缀

2 请求github数据案例

【List组件】

<template><div class="row"><!-- 展示用户列表 --><div class="card" v-show="info.users.length" v-for="user in info.users" :key="user.login"><a :href="user.html_url" target="_blank"><img :src="user.avatar_url" style='width: 100px'/></a><p class="card-text">{{user.login}}</p></div><!-- 展示欢迎词 --><h1 v-show="info.isFirst">欢迎使用Github用户搜索</h1><!-- 展示加载中 --><h1 v-show="info.isLoading">加载中...</h1><!-- 展示错误信息 --><h1 v-show="info.errMsg">{{ info.errMsg }}</h1></div>
</template><script>export default {name: 'List',data() {return {info: {isFirst: true,isLoading: false,errMsg: '',users: []}}},mounted() {this.$bus.$on('updateUsers', (dataObj) => {this.info = {...this.info, ...dataObj}  // 重名的属性以后面的为主,后面没有的就用前面的})},}
</script><style scoped>.album {min-height: 50rem; /* Can be removed; just added for demo purposes */padding-top: 3rem;padding-bottom: 3rem;background-color: #f7f7f7;}.card {float: left;width: 33.333%;padding: .75rem;margin-bottom: 2rem;border: 1px solid #efefef;text-align: center;}.card > img {margin-bottom: .75rem;border-radius: 100px;}.card-text {font-size: 85%;}
</style>

【Search组件】

<template><div><section class="jumbotron"><h3 class="jumbotron-heading">Search Github Users</h3><div><input type="text" v-model="keyWord" placeholder="enter the name you search"/>&nbsp;<button @click="search">Search</button></div></section></div>
</template><script>import axios from 'axios'export default {name: 'Search',data() {return {keyWord: ''}},methods: {search() {/* 请求前更新List数据 */this.$bus.$emit('updateUsers', { isFirst: false, isLoading: true, errMsg: '', users: []})axios.get(`https://api.github.com/search/users?q=${this.keyWord}`).then(response => {console.log('请求成功了', response.data.items)/* 请求成功后更新List数据 */this.$bus.$emit('updateUsers', { isLoading: false, errMsg: '', users: response.data.items})},error => {console.log('请求失败了', error.message)/* 请求失败后更新List数据 */this.$bus.$emit('updateUsers', { isLoading: false, errMsg: error.message, users: []})})}},}
</script><style></style>

【App组件】

<template><div class="container"><Search/><List/></div></template><script>import List from './components/List.vue'import Search from './components/Search.vue'export default {name:'App',components:{List,Search},}
</script>

3 插槽

3.1 默认插槽

【App组件】

<template><div class="container"><Category title="美食" :listData="foods"><img src="./assets/imgs/girl6.jpg" alt="" id="pg1"></Category><Category title="游戏" :listData="games"><ul><li v-for="(item,index) in games" :key="index">{{item}}</li></ul></Category><Category title="电影" :listData="films"><img src="./assets/imgs/girl3.jpg" alt="" id="pg1"></Category></div></template><script>import Category from './components/Category.vue'export default {name:'App',components:{Category,},data() {return {foods:['火锅','烧烤','小龙虾','牛排'],games:['红色警戒','穿越火线','劲舞团','超级玛丽'],films:['《教父》','《拆弹专家》','《你好,李焕英》']}},}
</script><style scoped>.container {display: flex;justify-content: space-around;}#pg1 {width: 100%;}</style>

【Category组件】

<template><div class="category"><h1>{{title}}分类</h1><!-- 定义一个插槽 (默认插槽)--><slot></slot></div>
</template><script>export default {name: 'Category',// props: ['listData', 'title']props: ['title']}
</script><style>.category {margin-left: 100px;margin-top: 100px;;width: 200px;height: 300px;background-color: skyblue;border: 1px solid orange;}h1{text-align: center;background-color: pink;}</style>

3.2 具名插槽

【App组件】

<template><div class="container"><Category title="美食" :listData="foods"><img slot="slot1" src="./assets/imgs/girl6.jpg" alt="" id="pg1"><a slot="slot2" href="http://www.baidu.com">百度</a></Category><Category title="游戏" :listData="games"><ul slot="slot1"><li v-for="(item,index) in games" :key="index">{{item}}</li></ul><a slot="slot2" href="http://www.baidu.com">百度</a></Category><Category title="电影" :listData="films"><img slot="slot1" src="./assets/imgs/girl3.jpg" alt="" id="pg1"><!-- <a slot="slot2" href="http://www.baidu.com">百度</a><h4 slot="slot2">欢迎光临</h4> --><!-- 使用 template标签这种写法时,就可以使用另一种写法 v-slot: 指定放入的插槽了 --><template v-slot:slot2><a href="http://www.baidu.com">百度</a><h4>欢迎光临</h4></template></Category></div></template><script>import Category from './components/Category.vue'export default {name:'App',components:{Category,},data() {return {foods:['火锅','烧烤','小龙虾','牛排'],games:['红色警戒','穿越火线','劲舞团','超级玛丽'],films:['《教父》','《拆弹专家》','《你好,李焕英》']}},}
</script><style scoped>.container {display: flex;justify-content: space-around;}#pg1 {width: 100%;}</style>

【Category组件】

<template><div class="category"><h1>{{title}}分类</h1><!-- 定义一个插槽 (具名插槽)--><slot name="slot1">我是插槽1, 没有内容放入时,会显示</slot><slot name="slot2">我是插槽1, 没有内容放入时,会显示</slot></div>
</template><script>export default {name: 'Category',// props: ['listData', 'title']props: ['title']}
</script><style>.category {margin-left: 100px;margin-top: 100px;;width: 200px;height: 300px;background-color: skyblue;border: 1px solid orange;}h1{text-align: center;background-color: pink;}</style>

3.3 作用域插槽

【Category组件】

<template><div class="category"><h1>{{title}}分类</h1><!-- 定义一个插槽 (作用域插槽)--><slot :games="games" :msg="msg">我是插槽1, 没有内容放入时,会显示</slot>  <!-- games传递给插槽的使用者 --></div>
</template><script>export default {name: 'Category',// props: ['listData', 'title']props: ['title'],data() {return {games:['红色警戒','穿越火线','劲舞团','超级玛丽'],msg:'你好啊'}},}
</script><style>.category {margin-left: 100px;margin-top: 100px;;width: 200px;height: 300px;background-color: skyblue;border: 1px solid orange;}h1{text-align: center;background-color: pink;}</style>


【App组件】

<template><div class="container"><Category title="游戏"><template scope="data"><ul><li v-for="(item,index) in data.games" :key="index">{{item}}</li></ul></template></Category><Category title="游戏"><!-- 解构赋值的写法 --><!-- 也可以使用 slot-scope="{games, msg}" --><template scope="{games, msg}"><ol><li v-for="(item,index) in games" :key="index" style="color:red">{{item}}</li></ol><h4>{{msg}}</h4></template></Category><Category title="游戏"><template scope="data"><h3><li v-for="(item,index) in data.games" :key="index">{{item}}</li></h3></template></Category></div></template><script>import Category from './components/Category.vue'export default {name:'App',components:{Category,},  }
</script><style scoped>.container {display: flex;justify-content: space-around;}
</style>

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

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

相关文章

15.一种坍缩式的简单——组合模式详解

当曾经的孩子们慢慢步入社会才知道&#xff0c;那年味渐淡的春节就像是疾驰在人生路上的暂停键。 它允许你在隆隆的鞭炮声中静下心来&#xff0c;瞻前顾后&#xff0c;怅然若失。 也允许你在寂静的街道上屏气凝神&#xff0c;倾听自己胸腔里的那团人声鼎沸。 孩子们会明白的&am…

【Flink精讲】Flink内核源码分析:命令执行入口

官方推荐per-job模式&#xff0c;一个job一个集群&#xff0c;提交时yarn才分配集群资源&#xff1b; 主要的进程&#xff1a;JobManager、TaskManager、Client 提交命令&#xff1a;bin/flink run -t yarn-per-job /opt/module/flink-1.12.0/examples/streaming/SocketWind…

Unity—JSON

每日一句&#xff1a;手简素中&#xff0c;感生活恬淡&#xff0c;心有所期&#xff0c;忙而不茫 目录 服务器 常见的服务器语言 Unity的开发语言 JSON 功能&#xff1a; JSON最简单的格式 JSON工具 支持的数据结构&#xff08;C#对于JSON&#xff09; 字符含义 JSON…

单片机stm32智能鱼缸

随着我国经济的快速发展而给人们带来了富足的生活&#xff0c;也有越来越多的人们开始养鱼&#xff0c;通过养各种鱼类来美化居住环境和缓解压力。但是在鱼类饲养过程中&#xff0c;常常由于鱼类对水质、水位及光照强度有着很高的要求&#xff0c;而人们也由于工作的方面而无法…

2023年12月CCF-GESP编程能力等级认证C++编程四级真题解析

一、单选题(共15题,共30分) 第1题 下面有关函数参数的说法,正确的是( )。 A:函数参数传递时,主函数当中采用值传递方式将参数传递给子函数时,若子函数将参数值改变,主函数当中的参数值不变。 B:函数参数传递时,主函数当中采用值传递方式将参数传递给子函数时,若子…

jvm垃圾收集器-三色标记算法

1.对象已死吗? 在堆里面存放着Java世界中几乎所有的对象实例&#xff0c;垃圾收集器在对堆进行回收前&#xff0c;第一件事情就是要确定这些对象之中哪些还“存活”着&#xff0c;哪些已经“死去”&#xff08;即不可能再被任何途径使用的对象). 引计数法 引用计数算法是一…

【快速搞定Webpack5】基本配置及开发模式介绍(二)

在开始使用webpack之前么&#xff0c;我们需要对Webpack的配置有一定的认识。 一、5大核心概念 1. enty&#xff08;入口&#xff09; 指示webpack从哪个文件开始打包 2. output&#xff08;输出&#xff09; 指示webpack打包完的文件输出到哪里去&#xff0c;如何命名等 …

适配器模式:转换接口,无缝对接不同系统

文章目录 **一、技术背景与应用场景****为什么使用适配器模式&#xff1f;****典型应用场景包括但不限于&#xff1a;** **二、适配器模式定义与结构****三、使用步骤举例****四、优缺点分析****总结** 一、技术背景与应用场景 适配器模式在软件设计中扮演着桥梁角色&#xff…

Linux(五)__系统管理

介绍 通常&#xff0c; Windows 中使用"任务管理器"主要有 3 个目的&#xff1a; 利用"应用程序"和"进程"标签来査看系统中到底运行了哪些程序和进程&#xff1b;利用"性能"和"用户"标签来判断服务器的健康状态&#xff1…

vue项目调用摄像头实现拍照功能

目录 1.功能需求 2.API 3.完整代码 4.效果 5.遇到问题 1.功能需求 需求:下面需求图 本来应该使用小程序做&#xff0c;但是为了以后复用考虑&#xff0c;决定使用vue嵌入小程序中。 所以需求就是 调用手机摄像头 实现拍照打卡功能&#xff08;电脑通用&#xff09; 2.API …

【Redis】Redis的数据分布算法

一共有五种算法&#xff0c;分别为&#xff1a;哈希算法、一致性哈希算法、带有限负载的一致性哈希算法、虚拟节点一致性哈希算法、虚拟槽分区 哈希算法 思想&#xff1a;根据某个key的值或者key 的哈希值与当前可用的 master 节点数取模&#xff0c;根据取模的值获取具体的服…

halcon 标定多元点标定板、棋盘格映射矫正图像、矫正失真图像

一、标定多圆孔标定 其理论与棋盘格 和圆孔都是一样的&#xff0c;不一样的地方就是定方向的方式不一样。如图 2、结果 read_image (CalibImage, ./circle/1.png) get_image_size (CalibImage, Width, Height) dev_close_window () dev_open_window_fit_image (CalibImage, 0…

“成像光谱遥感技术中的AI革命:ChatGPT应用指南“

遥感技术主要通过卫星和飞机从远处观察和测量我们的环境&#xff0c;是理解和监测地球物理、化学和生物系统的基石。ChatGPT是由OpenAI开发的最先进的语言模型&#xff0c;在理解和生成人类语言方面表现出了非凡的能力。本课程重点介绍ChatGPT在遥感中的应用&#xff0c;人工智…

2024牛客寒假算法基础集训营4(视频讲解题目)

2024牛客寒假算法基础集训营4&#xff08;视频讲解题目&#xff09; 视频链接ABCDEFG、H&#xff08;下面是hard版本的代码两个都可以过&#xff09; 视频链接 2024牛客寒假算法基础集训营4&#xff08;视频讲解题目&#xff09; A #include<bits/stdc.h> #define en…

C++:C++入门基础

创作不易&#xff0c;感谢三连 &#xff01;&#xff01; 一、什么是C C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。对于复杂的问题&#xff0c;规模较大的程序&#xff0c;需要高度的抽象和建模时&#xff0c;C语言则不合适。为了解决软件危机&#xff…

第100讲:MHA+Atlas实现MySQL主从复制读写分离分布式集群

文章目录 1.Atlas读写分离简介2.搭建MHA高可用MySQL主从复制集群3.部署配置Atlas读写分离中间件3.1.安装Atlas读写分离中间件3.2.配置读写分离3.3.启动Atlas读写分离 4.读写分离集群测试5.生产环境中创建一个用户通过Atlas使用6.Atlas通过管理接口实现在线管理7.Atlas自动分表 …

华为OD机试真题-开源项目热榜-2023年OD统一考试(C卷)---python免费

题目&#xff1a; 考察内容&#xff1a; 理解题目双排序 代码&#xff1a; """ 题目分析&#xff1a; 计算热度值&#xff0c;进行降序排序&#xff0c;热度值一样&#xff0c;字母小写&#xff0c;字典排序输入&#xff1a; 项目个数N, int 0-100 权重列表…

快速部署华为云WAF实现Web应用安全防护

通常&#xff0c;用户将web应用暴露在公网上&#xff0c;不做任何准备或者安全措施可能会受到黑客的注入入侵攻击导致网站核心数据被脱库泄露。以及木马上传网页篡改&#xff0c;导致网站公信力受到影响。本文九河云将为您介绍如何通过华为云WAF应用防火墙实现web应用安全防护&…

解锁创意灵感,探索FlutterExampleApps项目的奥秘

解锁创意灵感&#xff0c;探索FlutterExampleApps项目的奥秘 项目简介 FlutterExampleApps项目是一个包含各种示例应用链接的仓库&#xff0c;旨在演示Flutter应用开发中的各种功能、特性和集成。 项目包含了以下几个部分&#xff0c;每个部分都涵盖了不同的内容和主题&…

Day23--learning English

一、积累 1.straw 2.umami | tangy | bland 3.lactose dairy 4.fatigue 5.stumble | curb 6.pore 7.toll 8.arrear 9.robe 10.stylish 11.dash 12.mischief 13.ranch 14.sponsorship 15.podcast 16.villian 17.clutch 18.envision 二、练习 1.牛津原译 1.straw /strɔː/ 1…