Vue中发送Ajax请求的方式axios及其跨域问题的解决方案代理机制的配置和原理

Vue中的Ajax请求

现在比较流行的开发方式为异步调用,前后台以异步Ajax请求的方式进行交换数据,传输的数据使用的是JSON

  • Ajax请求发送后,当浏览器接收到服务器的响应内容后不会重新加载整个页面,只会更新网页的部分实现局部刷新的效果

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

  • 使用浏览器内置的JS对象XMLHttpRequest
  • 使用浏览器内置的JS函数fetch如fetch(‘url’, {method : ‘GET’}).then().then()
  • 第三方库方式: 对XMLHttpRequest进行封装,如jQuery提供的$.get()/post()方法,基于Promise的HTTP库axios提供的axios.get().then()

axios

使用vue-cli安装axios库npm i axios,然后在组件中使用import导入axios import axios from 'axios'

使用vue.js提供的axios方法发起Ajax请求,方法的参数是一个配置对象

  • method: 指定请求的方式
  • url: 指定请求的路径
  • paramsdata: 指定请求的参数,参数是一个对象

paramsdata属性的区别

  • 使用params属性时无论发送GET还是POST请求,请求参数都是以name=value&..的格式拼接到请求地址后,获取请求参数时通过requset对象的API
  • 使用data属性时,只能发送POST请求,且参数是以json格式存储到请求报文的请求体中,获取请求参数时需要相关的jar包将请求体中的json数据转成Java对象

使用axios({配置对象}).then(回调函数)方法发起Ajax请求

  • 使用params属性将请求参数以name=value&name=value的格式拼接到请求地址后
// 导入axios
import axios from 'axios'
testAjax:function (event) {
    axios({
        method:"post",
        url:event.target.href,
        params:{
            username:"admin",
            password:"123456"
        }
    }).then(function (response) {//服务器处理Ajax请求成功后执行的回调函数
        // 服务器响应的结果都会被封装在response对象中,响应的数据都在data属性中
        alert(response.data);
    });

使用axios.post(url,[data]).then(回调函数)方法和axios.get(url).then(回调函数)方法发起Ajax请求

  • 使用data属性将请求参数以json的格式存储到请求报文的请求体中
testAjax(){
    axios.post(
        "/SpringMVC/test/ajax",
        {username:"admin",password:"123456"}
    ).then(response=>{
        console.log(response.data);
    });
},

vue-resource插件

安装vue-resource插件npm i vue-resource,然后在main.js文件中导入插件并使用,此时项目中所有的vm和vc实例上都添加了$http属性

import Vue from 'vue'
import App from './App.vue'
// 导入插件vue-resource
import vueResource from 'vue-resource'
Vue.config.productionTip = false

// 使用插件,此时项目中所有的vm和vc实例上都添加了$http属性
Vue.use(vueResource)
new Vue({
  el : '#app',
  render : h => h(App)
})

使用vue-resource插件发送请求的用法和axios相同this.$http.get(‘’).then()

export default {
    name : 'App',
    data() {
        return {
            bugList : []
        }
    },
    // 在mounted钩子中发送ajax请求将响应的数据保存到bugList数组当中
    mounted() {
        // 使用vue-resource插件来发送AJAX请求
        this.$http.get('/api/vue/bugs').then(
            response => {
                console.log('响应数据:', response.data)
                this.bugList = response.data
            },
            error => {
                console.log('错误信息为:', error.message)
            }
        )
    },

Ajax跨域问题

参考文章Ajax跨域问题及其解决方案

启用Vue脚手架内置服务器

Vue脚手架内置了一个服务器端口号是8080,默认是没有开启代理功能的

在这里插入图片描述

我们需要在vue.config.js文件中添加配置开启vue-cli的代理机制,修改完配置文件需要重启服务器, 此时Vue会在服务器内部生成一个小程序

// 简单配置不支持配置多个代理
devServer: {
    // Vue脚手架内置的8080服务器负责代理访问8000服务器,到时候将资源直接拼接到端口后面
    proxy: 'http://localhost:8000' 
}

高级配置: 支持配置多个代理

 devServer: {
    proxy: {
       // 只代理以'/api'开始的资源(请求路径) 
      '/api': {
        target: 'http://localhost:8000',
		// URL重写,将路径中的'/api'以''代替,然后再将重写后的请求路径拼接到目标服务器的端口号后面
        pathRewrite: {'^/api' : ''},
        ws: true,
        changeOrigin: true
      },
      // 只代理以'/abc'开始的资源(请求路径) 
	  '/abc': {
        target: 'http://localhost:8001',
        pathRewrite: {'^/abc' : ''},
        // 默认值true,开启对websockt的支持(一种实时推送技术),
        ws: true,
        // 默认值true,改变起源让目标服务器不知道我们真正的起源在哪里,此时目标服务器获取到的是自己端口的起源
        changeOrigin: true
      }
       // 代替以'/'开始的资源即所有资源 
      '/': {
          
      }  
    }
  }

发送AJAX请求的时候会优先从自己的服务器当中找/vue/bugs资源(资源可能是静态的或动态的Java程序),如果找不到才去代理服务器上找对应的资源

<script>
    import axios from 'axios'
    export default {
        name : 'Bugs',
        methods: {  
            getBugs(){
                // http://localhost:8080/vue/bugs-->http://localhost:8000/vue/bugs
                /* axios.get('/vue/bugs').then(
                    response => {
                        console.log('服务器响应回来的数据:', response.data)
                    },
                    error => {
                        console.log('错误信息:', error.message)
                    }
                ) */
                
                // 当前按钮这个页面就是在8080服务器上,所以访问当前服务器上的资源时http://localhost:8080可以省略
			   // 先访问本地资源http://localhost:8080/api/vue/bugs---->重写URL删除'/api'(以空字符串代替)-->http://localhost:8000/vue/bugs
                axios.get('/api/vue/bugs').then(
                    response => {
                        console.log('服务器响应回来的数据:', response.data)
                    },
                    error => {
                        console.log('错误信息:', error.message)
                    }
                )
            }
            
            // http://localhost:8080/api/user/bugs-->重写URL删除'/abc'(以空字符串代替)-->http://localhost:8000/vue/users
            getUsers(){
                axios.get('/abc/vue/users').then(
                    response => {
                        console.log('服务器响应回来的数据:', response.data)
                    },
                    error => {
                        console.log('错误信息:', error.message)
                    }
                )
            },
            
        },
    }
</script>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java 对接企业微信(文本消息推送)

Java 对接企业微信&#xff08;文本消息推送&#xff09; 背景版本代码POM配置实体工具类发送消息测试配置文件配置文件中的参数来源secretcorpidagentid 执行异常原因 文档 背景 公司的项目&#xff0c;通知信息打算接入企业微信通知。提前做下实验。 版本 JDK 21 SpringBoo…

故障排查方法与技巧

判断网络是否稳定&#xff0c;最重要的两个命令 ping 10.28.0.23 -t -l 1000 -t &#xff1a;无限循环ping -l&#xff1a;指定数据包大小 内网环境< 1ms,是较好的网络&#xff0c;如果跳到100多&#xff0c;说明网络不稳定 telnet ip地址空格端口号 表示不通 数据库…

老师发成绩单攻略:5种方法让群发成绩变得更高效

作为老师&#xff0c;发布成绩单是一项重要的任务。为了更高效地完成这项任务&#xff0c;本文将介绍5种方法&#xff0c;帮助老师群发成绩单更加高效。 一、提前规划&#xff0c;做好准备 在发布成绩单之前&#xff0c;老师需要提前规划好发布的时间、方式、接收对象等&#…

路径总和(递归)

112. 路径总和 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径&#xff0c;这条路径上所有节点值相加等于目标和 targetSum 。如果存在&#xff0c;返回 true &a…

34、卷积实战 - 手写一个基础卷积算法

前面基本上把卷积这一算法的原理和公式介绍完了,如果还有不懂的,可以多翻几遍前面的章节内容,深入理解一下。 本节加一个实战,大家可以手动来实现一个卷积算法,本文中以 python 代码为例,C++ 的代码可以查看本节后面的链接。 说到卷积实现,其实就是自己手写一个卷积算…

js基础:简介、变量与数据类型、流程循环控制语句、数组及其api

JS基础&#xff1a;简介、变量与数据类型、流程循环控制语句、数组及其api 一、简介 1、js概述 tip&#xff1a;JavaScript是什么&#xff1f; 有什么作用&#xff1f; JavaScript&#xff08;简称JS&#xff09;是一种轻量级的、解释性的编程语言&#xff0c;主要用于在网页…

SpringCloud微服务(简略笔记二)

Docker 概念 docker和虚拟机的差异 * docker是一个系统进程&#xff1b;虚拟机是在操作系统中的操作系统 * docker体积小&#xff0c;启动速度&#xff0c;性能好&#xff0c;虚拟机体积大&#xff0c;启动速度慢&#xff0c;性能一般 镜像和容器 镜像&#xff08;image&…

多模态统计图表综述:图表分类,图表理解,图表生成,图表大一统模型

Overview 多模态统计图表综述一、图表分类1.1 Survey1.2 常见分类数据集&#xff1a;1.3 常见图表类型 二、图表理解2.1 VQA2..1.1 DVQA CVPR20182.1.2 PlotQA 20192.1.3 ChartQA 2022 2.2 Summary2.2.1 Chart-to-text ACL 2022 三、图表生成四、图表大一统模型4.1 UniChart 20…

stm32 使用18B20 测试温度

用18b20 测试温度是非常常用的&#xff0c;不过18B20的调试不是这么容易的&#xff0c;有些内容网上很多的&#xff0c;不再重复说了&#xff0c;我先把波形说一下&#xff0c;再说程序部分&#xff1a; 整个都温度数据的顺序是&#xff1a; 1.700uS的低电平复位并测试18B20的…

【matlab进阶学习-6】 读取log数据data.txt文件,并做处理,导出报告/表格/图表

原始文件 原始文件格式txt&#xff0c;每一行对应一个数据&#xff0c;数据之间由逗号分割开 对应意思 时刻&#xff0c;电压&#xff0c;电流&#xff0c;功率&#xff0c;容量&#xff0c;&#xff0c;电流&#xff0c;功率&#xff0c;&#xff0c;RTC时间&#xff0c;状态…

什么是电商价格监控

电商价格监控是一种系统爬取数据后的实现动作&#xff0c;比起含义&#xff0c;其实更应该关注为什么要做电商价格监控&#xff0c;电商价格监控的执行前提是品牌要治理渠道&#xff0c;需要将电商平台的低价链接打击干净&#xff0c;那就需要先对低价链接进行确认、筛选&#…

YOLOv8改进 | 2023主干篇 | 利用轻量化卷积优化PP-HGNetV2改进主干(全网独家创新)

一、本文介绍 Hello&#xff0c;大家好&#xff0c;上一篇博客我们讲了利用HGNetV2去替换YOLOv8的主干&#xff0c;经过结构的研究我们可以发现在HGNetV2的网络中有大量的卷积存在&#xff0c;所以我们可以用一种更加轻量化的卷积去优化HGNetV2从而达到更加轻量化的效果&#…

AspNetCore 中使用 Knife4jUI 更加友好的Swagger界面

&#x1f680;介绍 aspnetcore.knife4j是一个基于.NET Core平台的Swagger UI库&#xff0c;它提供了API文档的生成和管理功能。这个库的前身是swagger-bootstrap-ui&#xff0c;在Java项目中广泛使用&#xff0c;由于其优秀的界面和易用性被许多开发者所推崇。现在&#xff0c…

探索Nginx的奥秘--从代理到负载均衡的艺术实践

文章目录 &#x1f33a;Nginx的引入&#x1f33a;&#x1f33a;深刻理解正向代理与反向代理&#x1f33a;&#x1f339;Reverse proxy&#x1f339;&#x1f339;正向代理与反向代理的区别&#x1f339;&#x1f339;反向代理为什么叫反向代理&#x1f339;&#x1f339;负载均…

MySQL和Redis有什么区别?

目录 一、什么是MySQL 二、什么是Redis 三、MySQL和Redis的区别 一、什么是MySQL MySQL是一种开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它是最流行的数据库之一。MySQL以其高性能、可靠性和易用性而闻名&#xff0c;广泛应用于各种Web应用程序…

27系列DGUS智能屏发布:可实时播放高清模拟信号摄像头视频

针对高清晰度的模拟信号摄像头视频画面的显示需求&#xff0c;迪文特推出27系列DGUS智能屏。该系列智能屏可适配常见的AHD摄像头、CVBS摄像头&#xff0c;支持单路1080P高清显示、两路720P同屏显示&#xff08;同一类型摄像头&#xff09;。用户通过DGUS简单开发即可实现摄像头…

【二分查找】【区间合并】LeetCode2589:完成所有任务的最少时间

作者推荐 【动态规划】【广度优先】LeetCode2258:逃离火灾 本文涉及的基础知识点 二分查找算法合集 有序向量的二分查找&#xff0c;向量只会在尾部增加删除。 题目 你有一台电脑&#xff0c;它可以 同时 运行无数个任务。给你一个二维整数数组 tasks &#xff0c;其中 ta…

万界星空科技MES系统中的生产调度流程

MES系统生产调度的目标是达到作业有序、协调、可控和高效的运行效果&#xff0c;作业计划的快速生成以及面向生产扰动事件的快速响应处理是生产调度系统的核心和关键。 为了顺利生成作业计划&#xff0c;需要为调度系统提供完整的产品和工艺信息&#xff0c;MES系统生成作业计…

Flutter打包iOS苹果IPA应用有哪些优势?如何实现?

Hello各位小伙伴们各位开发者们好&#xff0c;我是咕噜铁蛋&#xff01;&#xff0c;经常和移动应用开发相关的话题打交道的伙伴们都知道。在开发移动应用时&#xff0c;选择合适的打包方式对于应用的发布和分发至关重要。在今天这篇文章中&#xff0c;我将和大家聊聊Flutter打…

【小沐学Python】Python实现语音识别(Whisper)

文章目录 1、简介1.1 whisper简介1.2 whisper模型 2、安装2.1 whisper2.2 pytorch2.3 ffmpeg 3、测试3.1 命令测试3.2 代码测试&#xff1a;识别声音文件3.3 代码测试&#xff1a;实时录音识别 4、工具4.1 WhisperDesktop4.2 Buzz4.3 Whisper-WebUI 结语 1、简介 https://gith…