动力节点Vue笔记④ Vue与Ajax

动力节点Vue笔记——Vue与Ajax 在a页面中想获取b页面中的资源,如果a页面和b页面所处的协议、域名、端口不同(只要有一个不同),所进行的访问行动都是跨域的。(11)在Search组件中触发事件的时候,将多个属性封装为对象的形式(语义化更明确)传给Weather组件。第三方库方式,基于Promise的HTTP库:axios (对XMLHttpRequest进行的封装)(7)初次打开页面的时候,不应该显示天气的任何信息,Weather组件应该是隐藏的。同源策略是浏览器需要遵循的标准,而如果是服务器向服务器请求就无需遵循同源策略的。 阅读详情

四、Vue与AJAX

4.1 回顾发送AJAX异步请求的方式

发送AJAX异步请求的常见方式包括:

原生方式,使用浏览器内置的JS对象XMLHttpRequest

  • const xhr = new XMLHttpRequest()
  • xhr.onreadystatechange = function(){}
  • xhr.open()
  • xhr.send()

原生方式,使用浏览器内置的JS函数fetch

  • fetch(‘url’, {method : ‘GET’}).then().then()

第三方库方式,JS库jQuery(对XMLHttpRequest进行的封装)

  • $.get()
  • $.post()

第三方库方式,基于Promise的HTTP库:axios (对XMLHttpRequest进行的封装)

  • axios.get().then()

axios是Vue官方推荐使用的。

4.2 回顾AJAX跨域

什么是跨域访问?

在a页面中想获取b页面中的资源,如果a页面和b页面所处的协议、域名、端口不同(只要有一个不同),所进行的访问行动都是跨域的。

哪些跨域行为是允许的?

  • 直接在浏览器地址栏上输入地址进行访问
  • 超链接
  • <img src=”其它网站的图片是允许的”>
  • <link href=”其它网站的css文件是允许的”>
  • <script src=”其它网站的js文件是允许的”>
  • ......

哪些跨域行为是不允许的?

  • AJAX请求是不允许的
  • Cookie、localStorage、IndexedDB等存储性内容是不允许的
  • DOM节点是不允许的

AJAX请求无法跨域访问的原因:同源策略

  • 同源策略是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSRF等攻击。同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。
  • AJAX请求不允许跨域并不是请求发不出去,请求能发出去,服务端能收到请求并正常返回结果,只是结果被浏览器拦截了。

解决AJAX跨域访问的方案包括哪些

① CORS方案(工作中常用的)

  • 这种方案主要是后端的一种解决方案,被访问的资源设置响应头,告诉浏览器我这个资源是允许跨域访问的:response.setHeader("Access-Control-Allow-Origin", "http://localhost:8080");

② jsonp方案(面试常问的)

  • 采用的是<script src=””>不受同源策略的限制来实现的,但只能解决GET请求。

③ 代理服务器方案(工作中常用的)

  • Nginx反向代理
  • Node中间件代理
  • vue-cli(Vue脚手架自带的8080服务器也可以作为代理服务器,需要通过配置vue.config.js来启用这个代理)
  • postMesssage
  • websocket
  • window.name + iframe
  • location.hash + iframe
  • document.domain + iframe
  • ......

代理服务器方案的实现原理

同源策略是浏览器需要遵循的标准,而如果是服务器向服务器请求就无需遵循同源策略的。

 

4.3 演示跨域问题

Vue脚手架内置服务器的地址:http://localhost:8080

可以额外再开启一个其它的服务器,这个服务器随意,例如:node server、Apache服务器、JBOSS服务器、WebLogic服务器、WebSphere服务器、jetty服务器、tomcat服务器......我这里选择的是基于Java语言的一个服务器Tomcat,这个web服务器开启了一个8000端口,提供了以下的一个服务,可以帮助我们获取到一个Bug列表:

http://localhost:8000/bugs/

打开BugList案例的代码,在mounted钩子函数中发送ajax请求,获取bug列表。

vue-cli安装axios库:npm i axios。使用时:import导入axios

以上的访问表示:在8080服务器中发送AJAX请求访问8000服务器,必然会出现AJAX跨域问题:

4.4 启用Vue脚手架内置服务器8080的代理功能

1.简单开启

vue.config.js文件中添加如下配置:

  devServer: {

    proxy: 'http://localhost:8000' // 含义:Vue脚手架内置的8080服务器负责代理访问8000服务器

  }

发送AJAX请求时,地址需要修改为如下:

原理:访问地址是http://localhost:8080/bugs,会优先去8080服务器上找/bugs资源,如果没有找到才会走代理。

另外需要注意的是:这种简单配置不支持配置多个代理。

2.高级开启

支持配置多个代理。  

devServer: {
    proxy: {
      '/api': {
        target: 'http://localhost:8000',
        pathRewrite:{'^/api', ''},
        ws: true, // 支持websocket
        changeOrigin: true // true表示改变起源(让目标服务器不知道真正的起源)
      },
'/abc': {
        target: 'http://localhost:9000',
        pathRewrite:{'^/abc', ''},
        ws: true, // 默认值true
        changeOrigin: true // 默认值true
      }
    }
  }

4.5 使用AJAX改造BugList案例

mounted钩子中发送ajax请求即可。

4.6 Vue插件库vue-resource发送AJAX请求

  1. 安装:npm i vue-resource
  2. import vueResource from ‘vue-resource’
  3. 使用插件:Vue.use(vueResource)
  4. 使用该插件之后,项目中所有的vm和vc实例上都添加了:$http属性。
  5. 使用办法:
  • this.$http.get(‘’).then() 用法和axios相同,只不过把axios替换成this.$http

4.7天气预报

1、实现效果

 2、接口来自:Сurrent weather and forecast - OpenWeatherMap

3、开发者进行注册,获取api key

4、获取当前天气的接口

5、根据城市名字获取经度和纬度的接口

 

6、功能实现要点:

(1)首先实现静态组件

  • App根组件下有两个子组件:Search、Weather

(2)根据城市名获取经度纬度的接口:

  • `http://api.openweathermap.org/geo/1.0/direct?q=${this.cityName}&appid=${apiKey}`
  • 以上红色字体采用了ES6的模板字符串。
  • 经度:const lon = response.data[0].lon
  • 纬度:const lat = response.data[0].lat

(3)获取天气信息的接口:

  • `https://api.openweathermap.org/data/2.5/weather?lat=${lat}&lon=${lon}&appid=${apiKey}`
  • 天气图标:response.data.weather[0].icon
  • 温度:response.data.main.temp
  • 湿度:response.data.main.humidity
  • 风力:response.data.wind.speed

(4)以上免费接口已经在服务端解决了跨域的问题,可以直接用。

(5)兄弟组件之间通信采用全局事件总线。

(6)以上接口返回的图标的id,根据图标id动态拼接图片地址

(7)初次打开页面的时候,不应该显示天气的任何信息,Weather组件应该是隐藏的。

(8)查询天气过程中,显示“正在拉取天气信息,请稍后...”

(9)如果访问的城市不存在时,应该提示“对不起,请检查城市名”

(9)如果出现其它错误一律显示“网络错误,请稍后再试”

(11)在Search组件中触发事件的时候,将多个属性封装为对象的形式(语义化更明确)传给Weather组件。

  • 在Weather组件中可以采用对象的形式一次性接收。
  • 注意结构中的代码:<p class="wind">{{weather.windSpeed}} m/s</p>

(12)ES6语法,合并对象

  • this.weather = {...this.weather, ...weather}
动力节点老杜Vue框架教程【四】Vue与AJAX Vue.js是一个渐进式 MVVM 框架,目前被广泛使用,也成为前端中最火爆的框架Vue可以按照实际需要逐步进阶使用更多特性,也是前端的必备技能动力节点老杜的Vue2+3全家桶教程已经上线咯!学习地址:https://www.bilibili.com/video/BV17h41137i4/视频将从Vue2开始讲解,一步一个案例,知识点由浅入深,然后很自然的过度到Vue3版本。每一个Vue的知识点讲解的非常通透,不但举例告诉你怎么用,还会告诉你底层实现原理。 阅读详情

相关推荐

老杜Vue实战教程完整版笔记(四)Vue与AJAX

学习の地止:https://www.bilibili.com/video/BV17h41137i4。

whgha的博客 350

vue获取当前位置的信息以及天气信息

/ 当地信息(城市、时间、地点、天气)local: {// ip地址所在城市city: '',// 所在城市温度// 天气类型type: '',// 时hour: '',// 分// 月month: '',// 日date: '',// 星期几day: ''// 出勤率echart数据},// 经纬度信息lat: null,lng: null},

weixin_56166823的博客 4127

动力节点B站的Java视频路线资源,非常全面

作为动力节点的铁杆粉丝,从刚开始接触Java就跟着动力节点的路线去学,一直到去年找到了还不错的工作,我今天整理了他们的学习资源,java学习路线和相关的学习视频,如果是零基础入门java的小伙伴,跟着这个路线可以节省很多时间。 这里有所有前沿技术,从基础到项目实战,而且是最新的教程,按照这个顺序学就完了! 一、Java基础阶段 【B站排名第一的】Java零基础视频844集(适合Java 0基础,Java初学入门) https://www.bilibili.com/video/BV1Rx411.

Java_Coding1的博客 1086

【动力节点】Vue课程笔记四、Vue与Ajax

在a页面中想获取b页面中的资源,如果a页面和b页面所处的协议、域名、端口不同(只要有一个不同),所进行的访问行动都是跨域的。(11)在Search组件中触发事件的时候,将多个属性封装为对象的形式(语义化更明确)传给Weather组件。第三方库方式,基于Promise的HTTP库:axios (对XMLHttpRequest进行的封装)(7)初次打开页面的时候,不应该显示天气的任何信息,Weather组件应该是隐藏的。同源策略是浏览器需要遵循的标准,而如果是服务器向服务器请求就无需遵循同源策略的。

Java_Leo12的博客 292

2023最新版老杜Vue2+3实战教程(四)Vue与AJAX

学习の地止:https://www.bilibili.com/video/BV17h41137i4。

qaswedpl的博客 395

动力节点老杜Vue框架教程【五】Vuex

vuex是实现数据集中式状态管理的插件。数据由vuex统一管理。其它组件都去使用vuex中的数据。只要有其中一个组件去修改了这个共享的数据,其它组件会同步更新。一定要注意:全局事件总线和vuex插件的区别:全局事件总线关注点:组件和组件之间数据如何传递,一个绑定on,一个触发on,一个触发on,一个触发emit。数据实际上还是在局部的组件当中,并没有真正的让数据共享。只是数据传来传去。vuex插件的关注点:共享数据本身就在vuex上。其中任何一个组件去操作这个数据,其它组件都会同步更新。

2301_76637473的博客 240

动力节点Vue3课程笔记——四、Vue与AJAX

原理:访问地址是http://localhost:8080/bugs,会优先去8080服务器上找/bugs资源,如果没有找到才会走代理。(11)在Search组件中触发事件的时候,将多个属性封装为对象的形式(语义化更明确)传给Weather组件。第三方库方式,基于Promise的HTTP库:axios (对XMLHttpRequest进行的封装)(7)初次打开页面的时候,不应该显示天气的任何信息,Weather组件应该是隐藏的。(9)如果访问的城市不存在时,应该提示“对不起,请检查城市名”

assdfgdfgjhtdo的博客 860

老杜Vue实战教程完整版笔记(五)Vuex

接上篇文章,分享动力节点老杜全新版Vue教程笔记 如果业务逻辑非常简单,也不需要发送AJAX请求的话,可以不调用dispatch方法,直接调用commit方法也是可以的。实现以下案例: {{**this.KaTeX parse error: Expected 'EOF', got '}' at position 19: …re.state.**name}̲} {{**this.store.getters.**reverseName}} 使用mapState和mapGetters进行名称映射,可以简化以上

whgha的博客 374

动力节点Vue笔记——第四章Vue与Ajax

在a页面中想获取b页面中的资源,如果a页面和b页面所处的协议、域名、端口不同(只要有一个不同),所进行的访问行动都是跨域的。(11)在Search组件中触发事件的时候,将多个属性封装为对象的形式(语义化更明确)传给Weather组件。第三方库方式,基于Promise的HTTP库:axios (对XMLHttpRequest进行的封装)(7)初次打开页面的时候,不应该显示天气的任何信息,Weather组件应该是隐藏的。同源策略是浏览器需要遵循的标准,而如果是服务器向服务器请求就无需遵循同源策略的。

weixin_54585403的博客 380

Javaweb完整入门,web全套学习教程「HTML+CSS+JS+Ajax+jQuery+VUE」

在前端这个岗位兴起之前,html+css的工作是被视觉人员所承担的,而js这部分则是由后端完成的。 随着智能手机和移动互联网的普及,五花八门的应用占领着每个人的手机,随之而来各种定制化的UI风格,让兼容问题变得越来越头疼。 因此,有企业开始把html+css+js这部分工作独立出来一个新的岗位来处理,成为了一个处理视觉和交互的综合岗位。 实际上,Web前端存在在我们生活中的每一个角落,我们每时每刻都会感受到它的存在。 我们每天要打开数十次的微信,里面的各种功能、小程序都离不开web前端技术。 同时加

Java___interview的博客 572

2023最新版老杜Vue2+3实战教程(五)Vuex

vuex是实现数据集中式状态管理的插件。数据由vuex统一管理。其它组件都去使用vuex中的数据。只要有其中一个组件去修改了这个共享的数据,其它组件会同步更新。一定要注意:全局事件总线和vuex插件的区别:全局事件总线关注点:组件和组件之间数据如何传递,一个绑定on,一个触发on,一个触发on,一个触发emit。数据实际上还是在局部的组件当中,并没有真正的让数据共享。只是数据传来传去。vuex插件的关注点:共享数据本身就在vuex上。其中任何一个组件去操作这个数据,其它组件都会同步更新。

qaswedpl的博客 238

动力节点Vue-p99-演示AJAX跨域问题~p101-开启Vue脚手架的代理机制

b站动力节点的这一期视频,弄了8000和8001两个后端访问的资源模拟ajax跨域问题,但是视频中并没有讲解怎么部署这两个资源。我也是根据动力节点前面的教学视频所学的之后,在IDEA中,使用Tomcat服务器进行了简单的部署,虽然有一些差别,但是也基本达到了想要的效果。由于前面JavaWeb讲过了很多知识,我就简单的给一些步骤就行了哈废话不多说,直接开搞。

qq_61570366的博客 104

STM32F103跑LVGL,用DMA加速刷屏,800*480大屏也能丝滑

本文详细介绍了如何在STM32F103芯片上通过DMA加速和内存优化,实现800*480大屏的LVGL流畅运行。通过FSMC+DMA硬件架构优化、双缓冲机制和LVGL参数调优,显著提升了界面刷新率和响应速度,适用于嵌入式GUI开发中的高性能需求场景。

weixin_30357231的博客 376

[记录学习]自学动力节点荣姐SpringMVC5笔记

SpringMVC5 学习笔记

sls1223074612的博客 4978

从华为杯建模到论文录用:我的Biomedical Signal Processing and Control投稿全记录(含Latex模板与审稿人推荐技巧)

本文详细记录了作者从华为杯数学建模竞赛到Biomedical Signal Processing and Control期刊投稿的全过程,分享了如何将竞赛成果转化为学术论文的实用技巧,包括LaTeX排版中的常见陷阱与解决方案,以及审稿人推荐策略。特别提供了针对Elsevier模板的优化建议和高效回复审稿意见的方法,适合生物医学信号处理领域的研究者参考。

weixin_42549037的博客 454

产业大脑+未来工厂:揭秘浙江数字经济系统的5大核心场景搭建指南

本文深入解析了“产业大脑+未来工厂”这一浙江数字经济系统的核心范式,并提供了五大核心场景的实战搭建指南。文章详细阐述了从供应链协同、产能共享到产品创新、质量追溯及绿色低碳等关键场景的构建逻辑与技术架构,旨在帮助企业实现从技术驱动到场景驱动的价值落地,破解数据孤岛难题,提升产业链整体效能。

mac99的博客 667

动力节点Vue笔记第五章vuex

on,一个触发。

Java_Coding1的博客 270

Python 爬虫实战:爬取评论数据做情感分析

摘要:本文介绍基于Python的京东商品评论爬取与情感分析全流程实现。通过Requests库抓取评论数据接口,结合JSON解析获取结构化评论信息。利用SnowNLP进行中文文本情感分析,量化用户评价的情感倾向(正面/负面/中性)。结果显示正面评论占比66.3%,负面评论13.3%,关键词分析发现"卡顿""发热"是主要负面因素。该方法可应用于产品优化、品牌管理等场景,为决策提供数据支持。

2503_91057718的博客 1709

动力节点Vue笔记第五章Vuex

on,一个触发。

assdfgdfgjhtdo的博客 327

coredump文件的原理是啥

Core Dump(核心转储)是操作系统在程序崩溃(如段错误、非法指令等)时自动生成的一个文件,它包含了程序崩溃瞬间的。通过 core dump,开发者可以像“时间回溯”一样检查程序崩溃瞬间的状态,是调试复杂问题的利器!终止时,Linux 内核会生成 core 文件。不会生成 core dump,因为它们是“优雅终止”信号。这样 core 文件会直接压缩存储,节省磁盘空间。的文件(类似可执行文件),可以用。Core 文件本质上是一个。

二进制君 383

8.Python基础语法(五)续【光说不练假把式,上题】

Python基础语法(二) 有关于Python循环语句的几道实操,让大家理解知识点更深更透彻~

孤寒者的博客 2万+

动力节点Vue3笔记第五章Vuex

on,一个触发。

weixin_54585403的博客 209

LPDDR4 JEDEC标准测试实例解析--写操作

LPDDR4的JEDEC标准一致性测试项详解以及实例分享,满满干货!感兴趣的小伙伴可以持续关注!!

一只豌豆象的博客 7774
上一篇: 动力节点杜老师Vue视频笔记第三章Vue组件化
下一篇: 动力节点Vue笔记第五章vuex
Java_Coding1
博客等级 码龄5年 9粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值