Vue 中的Ajax

news/2024/7/6 0:37:21/文章来源:https://www.cnblogs.com/wztblogs/p/18278672

Vue 中的Ajax

配置代理

发送ajax请求的方式:

1.xhr new XMLHttpRequest()

  • xhr.open() 配置请求信息

  • xhr.send() 发送请求

  • 虽是鼻祖,但很麻烦,一般对其进行二次封装

2.jQuery

  • $.get

  • $.post

  • jQuery的核心是 DOM操作,在vue等框架中不常使用

3.axios

  • 与jQuery相比的优势是 promise风格

  • 支持请求拦截器和响应拦截器

  • 体积小

4.fetch

  • jQuery和axios 都是对xhr的封装,fetch是与xhr平级

  • 是 promise风格

  • 会包两层 promise

  • 兼容性较差

 

下面解决 ajax 请求跨域问题

<template> <div>   <button @click="sendRequest">点击发送请求</button> </div>
</template>
​
<script>
import axios from "axios";
export default {   name:'App',   methods:{     sendRequest(){       axios.get('http://localhost:5000/students').then(           response =>{             console.log("请求成功,", response.data)           },           error =>{             console.log("请求失败",error.message)           }       )     }   }
}
</script>

上面是没有解决跨域问题

image-20240627184009190

结果是请求失败

所谓跨域就是违背了同源策略

同源策略规定 协议名、主机名、端口号必须一致

目前的情况是 http://localhost:8080http://localhost:5002 发送请求,所以跨域了

请求也发了,服务器也回应了,但是浏览器发现跨域后,没有把数据返回

如何解决?

  1. 用 cors,服务器返回的时候携带了一些特殊的响应头,所以能收到发来的数据

  2. 用 jsonp,借助了script标签里面的src 属性在引入外部资源时不受同源限制 来解决的,只能解决get请求

  3. 配置一台代理服务器,代理服务器和主机所处的端口相同,主机想要访问数据时,直接向代理服务器发送请求,代理服务器再向服务器请求

    代理服务器和服务器打交道不用ajax请求

开启代理服务器的方法

  • nginx

  • vue-cli

在vue.config.js 文件中配置

//   开启代理服务器
devServer:{   proxy:'http://localhost:5002'
}

在请求时 请求8080端口

axios.get('http://localhost:8080/students').then(   response =>{     console.log("请求成功,", response.data)   },   error =>{     console.log("请求失败",error.message)   }
)

这时就可以请求到数据了

当你请求的资源本身就有,就不会转发给5002服务器了

用这种方式不能配置多个代理,并且不能灵活控制是否向服务器发送请求

还有第二种方式配置代理服务器,能够解决配置多个服务器,并且可以控制是否发送请求

//     方式二 devServer:{   proxy:{     '/api':{       target:'http://localhost:5002',       pathRewrite:{'^/api' : ''},       ws:true,     //用于支持websocket       changeOrigin:true   //用于控制请求中的host值     },     '/api1':{       target:'http://localhost:5001',       pathRewrite:{'^/api' : ''},       ws:true,     //用于支持websocket       changeOrigin:true   //用于控制请求中的host值     }   }}

./api 代表的是除了 协议名主机名端口号之外的前缀,只要你的请求中带有这个前缀那么就走代理服务器,向服务器发送请求,请求的服务器地址是 target

这里有个问题,你的请求中是带有 ./api前缀的,那么请求到服务器也会有这个前缀,所以会报找不到资源

这时用 pathRewrite 将前缀替换成 空字符串即可

changeOrigin 如果是 true,那么服务器收到的请求的host 就是服务器的host,否则就是8080,默认值是true

axios.get('http://localhost:8080/api/students').then(   response =>{     console.log("请求成功,", response.data)   },   error =>{     console.log("请求失败",error.message)   }
)

请求时的路径要带前缀 /api

 

插槽

默认插槽

插槽可以动态地将不同的模板插入到指定的位置

下面用一个分类案例引入插槽

一开始是三个分类,分类中是 一个列表,展示每个分类的具体内容

<template> <div class="container">   <Category title="美食" :listData="food"/>   <Category title="游戏" :listData="game"/>   <Category title="影视" :listData="movie"/> </div>
</template>

在App组件中引入定义的 Category 组件,传入数据

<template> <div class="category">   <h3>{{title}}分类</h3>   <ul>     <li v-for="(item,index) in listData" :key="index">{{item}}</li>   </ul> </div>
</template>

在 Category 组件的模板中,定义有一个标题和列表,效果如图

image-20240630114933801

现在的需求改变了,想让 美食分类中只展示一张图片,影视分类展示一段视频,游戏分类不变,这时就用到插槽

首先在Category 组件中,把原先的列表删除,取而代之的是 <slot> 标签,标签里面是默认内容

<template> <div class="category">   <h3>{{title}}分类</h3>   <slot>默认内容,什么都不传就会展示</slot> </div>
</template>

然后在引入 Category 的地方,在 Category 组件标签里添加标签体内容,内容就是想要展示的内容

<template><div class="container"><Category title="美食" :listData="food"><img src="https://s3.ax1x.com/2021/01/16/srJlq0.jpg"></Category><Category title="游戏" :listData="game"><ul><li v-for="(item,index) in game" :key="index">{{item}}</li></ul></Category><Category title="影视" :listData="movie"><video controls src="https://haokan.baidu.com/v?vid=18035948914920602112&tab=recommend"></video></Category></div>
</template>

slot 标签就是在Category 标签中占个位,等待去填充

image-20240630120703302

具名插槽

具名插槽就是拥有名字的插槽,可以指定什么内容往哪个插槽里放

如果想要在内容下面再追加一些内容的话,可以再定义一个插槽,这时存在的两个插槽就要给他们定义名字,否则就会把模板往这两个插槽中放两份

<template><div class="category"><h3>{{title}}分类</h3><slot name="center">1默认内容,什么都不传就会展示</slot><slot name="footer">2默认内容,什么都不传就会展示</slot></div>
</template>

用name属性去定义 slot的名字

在使用组件的地方使用 slot 属性指定往哪个插槽中插入

<Category title="美食" :listData="food"><img slot="center" src="https://s3.ax1x.com/2021/01/16/srJlq0.jpg"><a slot="footer" src="www.baidu.com">跳转到百度</a>
</Category>

指定slot 的时候 还有另外一种写法

就是 用 v-slot:center 用 v-slot 直接绑定某个插槽的名字

这种写法只能使用于 template 标签

 

作用域插槽

当数据在组件定义的地方,而组件的结构是由组件使用者来决定的,那么组件的使用者在使用组件时就获取不到组件中的数据,这时可以用作用域插槽

在组件定义的地方,也就是用 slot标签占位的地方,把数据给组件使用者传递过去

<template><div class="category"><h3>{{title}}分类</h3><slot :games="game">1默认内容,什么都不传就会展示</slot></div>
</template>

在使用组件的地方,用scope 或 slot-scope 接收,这里需要注意 必须在template 标签中写这两个属性

属性值可以随意起,它接收到的是一个对象,里面就有组件传递过来的数据

<template><div class="container"><Category title="游戏"><template scope="appGame"><ul><li v-for="(item,index) in appGame.games" :key="index">{{item}}</li></ul></template></Category><Category title="游戏" ><template scope="appGame"><ol><li v-for="(item,index) in appGame.games" :key="index">{{item}}</li></ol></template></Category><Category title="游戏"><template scope="appGame"><h4><li v-for="(item,index) in appGame.games" :key="index">{{item}}</li></h4></template></Category></div>
</template>

 

总结

作用:让父组件可以向子组件指定位置插入html结构,也是组件间通信的方式

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

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

相关文章

用于模糊测试的工具

用于模糊测试的工具 Wfuzz Wfuzz通过将占位符 FUZZ 替换为 wordlist 值来工作。为了更清楚地理解这一点,让我们考虑一个例子: $ wfuzz -w userIDs.txt https://example.com/view_photo?userId=FUZZ在上面的命令中,userIds.txt 是一个包含数字 ID 值的 worldlist 文件。在这…

springboot+vue项目如何集成企业微信

本文以springboot+vue技术开发的低代码平台为案例,介绍应用系统如何集成企业微信,包括同步企业微信组织用户、单点登录、消息发送等。本文以springboot+vue技术开发的低代码平台为案例,介绍应用系统如何集成企业微信,包括同步企业微信组织用户、单点登录、消息发送等。 在线…

win11添加开机自启动

方法1win + R 打开运行,输入 shell:startup会打开一个文件夹将想要启动的程序快捷方式放进文件夹在设置里面搜索“启动”,可以看到开机启动项,确认已经打开。以上,针对不用管理员权限启动的程序,有效。 方法2 下面看需要管理员权限的:按Win+R,输入regedit,打开注册表编…

使用 Amazon Bedrock Converse API 简化大语言模型交互

本文将介绍如何使用 Amazon Bedrock 最新推出的 Converse API,来简化与各种大型语言模型的交互。该 API 提供了一致的接口,可以无缝调用各种大型模型,从而消除了需要自己编写复杂辅助功能函数的重复性工作。文中示例将展示它相比于以前针对每个模型进行独立集成的方式,具有…

MyBatis中Where标签:揭秘高效SQL构建的秘密

哈喽,大家好,我是木头左!理解Where标签的基础概念 在MyBatis中,<where>标签是用于构建SQL查询语句中的一个非常重要的元素。它允许你在一个动态的SQL语句中添加WHERE子句,而不需要担心SQL语法错误或额外的逗号和AND/OR关键字。使用<where>标签可以让的SQL语句…

用Python pynput库捕捉每一次组合键的优雅舞步

哈喽,大家好,我是木头左!一、初识pynput:键盘与鼠标的监控利器 当谈论计算机交互时,键盘和鼠标无疑是最常用的设备。无论是编写代码、浏览网页还是玩游戏,都依赖于这些输入设备与机器沟通。但在一些特殊的场景中,可能需要知道用户具体按下了哪些键,甚至是以何种顺序、何…

模拟集成电路设计系列博客——8.3.1 抖动与相位噪声

8.3.1 抖动与相位噪声 不像大部分集成电路中的模拟信号以电压或电荷来承载信息,对于时钟波形来说,其重要方面在于其穿越某些特定阈值时的特定时间点。抖动是这些特定时间点上的随机偏差,而相位噪声是这些时间点上的随即偏差,相位噪声则是抖动的频域表示。由于抖动和相位噪声…

Linux 中 uid、gid、euid、egid、groups 之间的关系

导航1 权限匹配流程 2 五种身份变化 3 有效用户/组 4 特权对 Shell 脚本无效 5 Sudo 与 SUID/SGID 的优先级 6 SUID、SGID、Sticky 各自的功能Linux最优秀的地方之一,就在于他的多人多工环境。而为了让各个使用者具有较保密的档案资料,因此档案的权限管理就变的很重要了。 Li…

通义灵码 Visual Studio 小白上手指南

本安装步骤适用于 Windows 10 及以上操作系统中安装和使用通义灵码。一、下载和安装指南 本安装步骤适用于 Windows 10 及以上操作系统中安装和使用通义灵码。 步骤 1:准备工作操作系统:Windows 10 及以上; 下载并安装 ****Visual Studio 2022 17.3.0 及以上版本。步骤 2:在…

mysql 8修改数据库用户密码

一、使用以下命令 ALTER USER root@localhost IDENTIFIED BY 1234; 二、在navicat中点击“用户”菜单然后点击“编辑”按钮修改用户密码

java中的函数式接口:(Consumer、BiConsumer、Supplier、Predicate、Function、BiFunction)

Consumer说明:(1)consumer接口来自java8中引入的Java.util.function包(2)Consumer是一个功能接口,用来作为lambda表达式或方法引用的任务目标(传递一个参数执行指定的方法)。 功能:Consumer的功能接口是一个接受单一参数并且不返回任何结果的操作。必要时,"结果&q…

ros microros 舵机控制原理

1. 什么是舵机: 舵机是一种位置伺服的驱动器,主要是由外壳、电路板、驱动马达、齿轮组和位置反馈电位计等元件所构成,适用于那些需要角度不断变化并可以保持的控制系统。 2. 舵机的工作原理是:控制电路板接收来自信号线的控制信号,控制电机转动,电机带动一系列齿轮组,减…

STM32时钟配置

STM32F10x时钟配置 根据参考手册可知STM32F10x系列的时钟树如下:图中给了说明了HSE、HSI、LSI、LSE的全称。HSE(The high speed external clock signal),高速外部时钟信号,需要4-16MHz的外部振荡器 HSI(The high speed internal clock signal),高速内部时钟信号,使用8MHz…

SpringBoot项目配置文件加密

前言 防止配置文件敏感信息泄露,去年公司出现过类似事件,也防止源码泄露,对项目中的配置文件进行加密 引入方式 pom文件引入以下依赖 <dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifac…

Educational Codeforces Round 167 (Rated for Div. 2) A-D

A. Catch the Coin题意:在一个二维坐标系上有一个硬币每秒y轴坐标减一,而你每秒可以向旁边八个方向移动,问你有没有一个时刻你会和硬币重叠。 思路:注意到在y小于-2时,我们无论如何都追不到硬币,而其他时候我们可以采取向左下或者右下的策略来保持和硬币y轴下落同步移动的…

ASP.NET Core MVC 从入门到精通之HttpContext

原文链接:https://www.cnblogs.com/hsiang/p/17368101.html 什么是HttpContext? 在B/S模式开发的程序中,客户端是浏览器,服务器端Web服务程序,HttpContext是连接客户端和服务器端程序的桥梁,交代了当前请求的环境信息,它封装了请求[Request]和响应[Response]及其他所有信…

实战篇——SQL注入sqli-labs-master靶场实战一

实战篇——SQL注入sqli-labs-master靶场实战(1) SQL注入的原理 没有对用户的输入进行合法性判断或过滤,而是直接将其拼接至SQL查询语句当中作为命令执行,从而导致非法操作。 SQL注入的检测 也就是闭合方式的判断,根据报错信息的不同情况可以分为3类——(1)有报错信息 (2)无报…

不用虚拟机在Windows上安装Linux子系统(win11)

打开终端输入以下命令查看是否支持安装systeminfo最底下是4个yes代表支持 在开始菜单输入如下搜索 打开拉到最底下,勾选这两个选项 按照提示重启电脑 打开终端输入以下命令会自动安装最新的Ubuntu发行版wsl --install可以通过如下命令查看其他版本wsl --list --online安装过程…

manim边学边做--Tex

Tex类继承自MathTex,具体功能和MathTex差不多,有一些细节的差别。在实际的使用中,我感觉Tex在结合一般文本和公式时更方便一些,所以我用的比较多的是Tex。Tex在manim各个模块中的位置大致如上图中所示。 1. Tex与MathTex区别 Tex的主要参数和方法和MathTex是一样的,所以本…