vue(21):前后端交互(获取后台数据)

接口调用方式

  • 原生ajax
  • 基于jQuery的ajax
  • fetch
  • axios

Promise

概述
Promise时异步编程的一种解决方案,从语法上将,Promise是一个对象,从它可以获取异步操作的消息

优点:

  • 可以避免多层异步调用嵌套问题(回调地狱)
  • Promise对象提供了简介的API,使得异步操作更加容易

基本用法:

  • 实例化Promise对象,构造函数中传递函数,该函数用于处理异步任务
  • resolve和reject两个参数用于处理成功和失败两种情况,并通过then函数获取处理结果

格式:

var p=new Promise(function(resolve,reject){
	//成功调用resolve()
	//失败调用reject
})
p.then(function(ret){
	//从resolve得到正常结果
},function(ret){
	//从reject得到错误信息
})

实例:基本使用格式

var p = new Promise(function(resolve, reject) {
	setTimeout(function() {
		var flog = true
		if (flog) {
			//正常情况
			resolve('Hello')
		} else {
			//异常情况
			reject('错误')
		}
	}, 100)
})
p.then(function(ret) {
	console.log(ret)
}, function(ret) {
	console.log(ret)
})

实例:基于Promise发送Ajax请求

function queryData(url) {
	var p = new Promise(function(resolve, reject) {
		//ajax
		var xml = new XMLHttpRequest();
		xml.onreadystatechange = function() {
			if (xml.readyState != 4) return;
			if (xml.readyState == 4 && xml.status == 200) {
				resolve(xml.responseText)
			} else {
				reject('服务器错误')
			}
		}
		xml.open('GET', url);
		xml.send(null)
	})
	return p;
}
queryData('data.json').then(function(data) {
	console.log(data)
}, function(info) {
	console.log(info)
})

data.json是我在当前目录下写的一个json文件
在这里插入图片描述
发送多次Ajax请求
格式:

queryData(url)
	.then(function(data){
		return queryData()
	})
	.then(function(data){
		return queryData(url)
	})
	...
	;

url可以不相同

then参数中的函数返回值:

  • 返回Promise实例对象,返回的该实例对象会调用下一个then
  • 返回普通值,返回的普通值会之间传递给下一个then,通过then参数中函数的参数接收该值

实例方法

  • p.then() 得到异步操作的正确结果
  • p.catch() 获取异常信息
  • p.finally() 成功与否都会执行

结构:

queryData(url)
	.then(function(data){
	})
	.catch(function(data){
	})
	.finally(function(data){
	})

对象方法

  • Promise.all() 并发处理多个异步任务,所有任务都执行完成才能得到结果(所有异步任务的结果集)
  • Promise.race() 并发处理多个异步任务,只要有一个任务完成就能得到结果(最先返回的那个结果)

结构:

Promise.all([p1,p2,p3]).then(data=>{
})

Promise.race([p1,p2,p3]).then(data=>{
})

fetch

特点:

  • 更加简单的数据获取方式,功能更强大,更灵活,可以看作是Ajax的升级版
  • 基于Promise实现

语法结构

fetch(url).then(fn1)
		  .then(fn2)
		  ....
		  .catch(fn)

实例

fetch('data.json').then(data => {
	return data.text() //固定格式
}).then(data => {
	console.log(data) //返回请求结果
})

注:text()方式是fetchApI中的一部分,它返回一个Promise实例对象,用于获取后台返回的数据

fetch请求参数

  • method(String) :HTTP请求方法,默认为get(get、post、put、delete)
  • body(String):HTTP的请求参数
  • headers(Object):HTTP请求头,默认为{}

get请求参数

//推荐
fetch('/abc?id=5'{
	method:'get'
}).then(data => {
	return data.text() //固定格式
}).then(data => {
	console.log(data) //返回请求结果
})
//或
fetch('/abc/5'{
	method:'get'
}).then(data => {
	return data.text() //固定格式
}).then(data => {
	console.log(data) //返回请求结果
})

post请求参数

fetch('/abc'{
	method:'post', //必须
	body:'name=张三&id=5', //必须
	headers:{
	'Content-Type':'application/x-www-form-urlencoded' //必须,指定返回的格式
	}
}).then(data => {
	return data.text() //固定格式
}).then(data => {
	console.log(data) //返回请求结果
})

响应数据格式:

  • text():返回字符串格式
  • json():返回json格式

axios

这篇文章可以看一下:axios的基本使用

特点:

  • 支持浏览器和node.js
  • 支持Promise
  • 能来拦截请求和响应
  • 自动转换JSON数据

cdn

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

在vue中使用

//局部使用
import axios from 'axios'
axios.get();
//全局使用,在main.js中注册
import axios from 'axios'
Vue.prototype.$axios = axios;
this.$axios.get();   //使用

基本用法

//get:查询数据
axios.get(url).then(ret=>{
	//data属性名称是固定的,用于获取后台响应的数据
	console.log(ret.data)
})
//get传参
axios.get('abc?id=5').then(ret=>{   
	//data属性名称是固定的,用于获取后台响应的数据
	console.log(ret.data)
})
axios.get('abc',{
	params:{
		id:123
	}
}).then(ret=>{
	//data属性名称是固定的,用于获取后台响应的数据
	console.log(ret.data)
})

//post:添加数据
axios.post('abc',{     //默认传递的是json格式的数据
	id:5,
	name:'张三'
}).then(ret=>{
	//data属性名称是固定的,用于获取后台响应的数据
	console.log(ret.data)
})

var params=new URLSearchParams();     //用于提交表单
params.append(key1,value1);
params.append(key2,value2);
axios.post('/abc',params).then(ret=>{
})

//put:修改数据
axios.put('abc',{     //默认传递的是json格式的数据
	id:5,
	name:'张三'
}).then(ret=>{
	//data属性名称是固定的,用于获取后台响应的数据
	console.log(ret.data)
})
//delete:删除数据
axios.delete('abc?id=5').then(ret=>{   
	//data属性名称是固定的,用于获取后台响应的数据
	console.log(ret.data)
})
axios.delete('abc',{
	params:{
		id:123
	}
}).then(ret=>{
	//data属性名称是固定的,用于获取后台响应的数据
	console.log(ret.data)
})

请求拦截器
请求拦截器的作用是在请求发送前进行一些操作,例如在每个请求体里加上token,统一做了处理如果以后要改也非常容易。

 axios.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么,例如在请求头中加入token
    config.headers.Authorization = window.sessionStorage.getItem('token')
    return config;
  }, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  });

响应拦截器
响应拦截器的作用是在接收到响应后进行一些操作,例如在服务器返回登录状态失效,需要重新登录的时候,跳转到登录页。

 axios.interceptors.response.use(function (response) {
    // 在接收响应做些什么,例如跳转到登录页
    ......
    return response;
  }, function (error) {
    // 对响应错误做点什么
    return Promise.reject(error);
  });

移除拦截器

var myInterceptor = axios.interceptors.request.use(function () {/*...*/});
axios.interceptors.request.eject(myInterceptor);

为axios实例添加拦截器

axios.interceptors.request.use(function (config) {/*...*/});

响应结果的主要属性

  • data:实际响应回来的数据
  • headers:响应头信息
  • status:响应状态码
  • statusText:响应状态信息

axios的全局配置

  • axios.default.timeout = 3000 设置超时事件
  • axios.default.baseURL = .... 设置默认请求地址
  • axios.default.headers['value'] = ..... 设置请求头
### 回答1: 在写一个前后端分离的后台管理系统时,您可以使用 Spring Boot 作为后端框架, Vue.js 作为前端框架,MyBatis 作为数据访问框架。 首先,您需要在 Spring Boot 配置 MyBatis,连接到数据库并编写相应的 SQL 语句。然后,您可以编写后端控制器来处理 HTTP 请求,并使用 MyBatis 执行数据库操作。 在前端部分,您可以使用 Vue.js 构建用户界面,并使用 Axios 等库与后端进行交互。当用户在前端界面进行操作时,Vue.js 将调用相应的函数并发送 HTTP 请求到后端。后端控制器将处理请求并返回响应,Vue.js 将使用响应更新前端界面。 总的来说,使用 Spring Boot、Vue.js 和 MyBatis 开发前后端分离的后台管理系统是一个不错的选择,它们提供了良好的支持和工具,帮助您快速构建功能丰富、可扩展的后台管理系统。 ### 回答2: 要写一个前后端分离的后台管理系统,首先需要明确系统的功能和需求,然后结合Spring Boot、Vue和MyBatis这三个框架进行开发。 1. 后端开发: - 使用Spring Boot搭建后台服务,配置相关依赖和基本的配置。 - 设计数据库表结构,并使用MyBatis进行数据库操作。 - 创建后端接口,包括用户管理、权限管理、数据查询等功能,并使用MyBatis实现相关的数据操作。 - 配置接口的权限验证,使用Spring Security进行登录认证和权限控制。 2. 前端开发: - 使用Vue框架搭建前端界面,并配置相关依赖和基本的配置。 - 设计后台管理系统的页面布局和样式,使用Vue Router进行前端路由管理。 - 实现用户登录和权限验证功能,与后端接口进行通信,使用Axios进行数据请求和响应处理。 - 开发各个功能模块的前端页面,包括用户管理、权限管理、数据查询等,并与后端接口进行数据交互。 3. 前后端协作: - 前后端的数据交互一般使用JSON格式,后端通过Spring Boot提供的@RestController注解,返回JSON格式的数据给前端。 - 前端通过Axios库发送请求给后端接口,获取数据并进行处理展示。 - 前后端对接口的定义和数据格式进行约定,确保数据的有效性和一致性。 - 前后端进行联调和测试,确认系统正常运行并满足需求。 总之,使用Spring Boot、Vue和MyBatis可以很好地实现一个前后端分离的后台管理系统。通过后端提供接口和数据服务,前端实现页面展示和用户操作,两者通过数据交互实现系统功能。这种架构可以提高开发效率和可维护性,实现前后端的解耦和灵活性。 ### 回答3: 将SpringBoot与Vue和MyBatis结合起来构建一个前后端分离的后台管理系统可以分为以下几个步骤: 1. 创建SpringBoot项目:首先,我们需要创建一个SpringBoot项目作为后端服务。可以使用Spring Initializr快速搭建项目基础结构,并且添加所需的依赖,如Spring Web、Spring Data JPA、MyBatis等。 2. 设计数据库结构:根据后台管理系统的需求,设计数据库表结构,并使用MyBatis创建对应的实体类和Mapper接口。 3. 编写后端API:在SpringBoot项目,编写对应的Controller类,实现接口的定义和业务逻辑。通过注解配置路由信息,用于定义API的访问路径和请求方式,同时接收前端传递的参数并返回相应的结果。 4. 创建Vue项目:使用Vue脚手架工具(例如Vue CLI)创建一个新的Vue项目作为前端界面。在项目初始化选择自己喜欢的UI框架(如ElementUI),并安装需要的插件和依赖。 5. 编写前端页面:根据后台管理系统的需求,设计并编写相应的页面组件。利用Vue的组件化开发,将整个页面划分为不同的组件,并进行组件的构建和样式的设计。 6. 实现前后端数据交互:在Vue项目,使用axios或者其他HTTP请求库与后端建立请求连接,发送API请求,并接收后端返回的数据。可以使用Vue的生命周期钩子函数或者Vuex来处理数据的请求和响应。 7. 页面路由与导航:根据后台管理系统的需求,在Vue项目设置路由信息,配置页面导航和跳转功能。可以利用Vue Router进行路由的管理和操作。 8. 测试和部署:完成以上步骤后,进行系统的单元测试和集成测试,并进行系统的部署和上线。 通过以上步骤,就可以使用SpringBoot、Vue和MyBatis构建一个前后端分离的后台管理系统。前端通过Vue实现了页面的展示和交互逻辑,后端通过SpringBoot提供了API的定义和业务处理,而MyBatis则负责与数据库之间的交互操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无知的小菜鸡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值