Vue Axios 异步请求获取返回数据 (详解) | 您所在的位置:网站首页 › 后端异步返回 › Vue Axios 异步请求获取返回数据 (详解) |
1. Axios 功能
浏览器端发起XMLHttpRequests请求 node层发起http请求 支持Promise API 拦截请求和响应 转换请求和响应数据 取消请求 自动转换JSON数据 客户端支持防御XSRF(跨站请求伪造) 2. 安装方式npm npm install axios bower bower install axios cdn 引入方式 3. 实例单页面使用方式 Get 请求 axios.get('/login',params:{name:123,pws:123}) .then( res => { //获取数据 console.info(res) }).catch( e => { if(e.response){ //请求已发出,服务器返回状态码不是2xx。 console.info(e.response.data) console.info(e.response.status) console.info(e.response.headers) }else if(e.request){ // 请求已发出,但没有收到响应 // e.request 在浏览器里是一个XMLHttpRequest实例, // 在node中是一个http.ClientRequest实例 console.info(e.request) }else{ //发送请求时异常,捕捉到错误 console.info('error',e.message) } console.info(e.config) })Post 请求 axios.post('/login',{name:123,pws:123}) .then( res => { //获取数据 console.info(res) }).catch( e => { if(e.response){ //请求已发出,服务器返回状态码不是2xx。 console.info(e.response.data) console.info(e.response.status) console.info(e.response.headers) }else if(e.request){ // 请求已发出,但没有收到响应 // e.request 在浏览器里是一个XMLHttpRequest实例, // 在node中是一个http.ClientRequest实例 console.info(e.request) }else{ //发送请求时异常,捕捉到错误 console.info('error',e.message) } console.info(e.config) }) 4. 常见错误错误 undefind Ajax 是异步请求 这是因为你发送了异步请求,但请求的数据还没返回回来,就已经执行到return语 句,自然就返回undefind了 在 ajax 里 return 无效 5. 跨页面获取 Axios 返回数据 方式假设 页面分别为 A B两页面 , A 请求 B 页面数据 1. 方法一 使用 Promise 异步 回调 Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象。 所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个¬对象,从它可以获取异步操作的消息。Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理。 同步和异步 JavaScript的执行环境是「单线程」。 所谓单线程,是指JS引擎中负责解释和执行JavaScript代码的线程只有一个,也就是一次只能完成一项任务,这个任务执行完后才能执行下一个,它会「阻塞」其他任务。这个任务可称为主线程。 但实际上还有其他线程,如事件触发线程、ajax请求线程等。 这也就引发了同步和异步的问题。Page B 定义 export function login(method, params) { return new Promise((resolve, reject) => { axios.get(host + String(method), { params: params }).then(res => { //将获取数据 同个 Promise 格式传递回 Page A resolve(res.data.result); }).catch(err => { reject(err.data) }) }); }返回的格式如下:为一个Promise对象, 带有promiseStatus和promiseValue 定义变量 result 接受数据 data() { result:"" }; Page A 定义 使用Promise 回调方法 then 回调 处理 let params = new URLSearchParams(); params.append("username", this.username); params.append("password", this.password); login("login", params).then(res => { this.result = res; if (this.result) { this.tishi="登录成功!"; /**得到结果**/ console.log(this.result); } else { this.tishi = "用户名或密码错误"; } }ES7的异步特性async / await 异步请求可以改善用户体验。但是在某些特殊情况,我们依然需要使用同步请求来实现交互 async用于申明一个函数是异步的,await等待异步请求完成,await只能在async方法中使用。 Page B export function login(method, params) { return new Promise((resolve, reject) => { axios.get(host + String(method), { params: params }).then(res => { resolve(res.data.result); return res.data.result; }).catch(err => { reject(err.data) }) }); }Page A 在调用 方法前 加上标注 async 异步请求 和 await 同步 async login() { if (this.username !="" || this.password !="") { let params = new URLSearchParams(); params.append("username", this.username); params.append("password", this.password); let result = await getp("login", params); if (this.result) { this.tishi="登录成功!"; } else { this.tishi = "用户名或密码错误"; } } }本文未经授权 不得转载 |
CopyRight 2018-2019 实验室设备网 版权所有 |