Javaweb - 14.6 - Vue3 數據交互 Axios

目錄

Promise

普通函數和回調函數

Promise 簡介

Promise 基本用法

async 和 await 的使用

Axios 介紹

Axios 入門案例

Axios 的 get 和 post 方法

Axios 攔截器

完!


Promise

普通函數和回調函數

普通函數:正常調用的函數,一般函數執行完畢后才會繼續執行下一行代碼

回調函數:一種基于事件的,自動調用,未來會執行的函數。其他的代碼不會等待回調函數執行完畢。

舉個例子:那年,你和女神風華正茂

????????承諾:考完試之后,一起去吃麻辣燙~? ---->? function(){ }

? ? ? ? 1. 進行中 ---> 其他代碼繼續執行 (不會影響你和女神備考的行為)

? ? ? ? 2. 成功? ? --->? ?準備好成功時處理的預案(找一家好吃的麻辣燙~)

? ? ? ? 3. 失敗? ? --->? 準備好失敗時處理的預案(找一個沒人注意的墻角偷偷抹淚~)

Promise 就是一個方便我們自己設置一個回調函數的 API

Promise 簡介

前端中的異步編程技術,類似 Java 中的多線程 + 線程結果回調

Promise,簡單來說就是一個容器,里面保存著某個未來才會結束的事件的結果。從語法上說,Promise 是一個對象,從它可以獲取異步操作的信息。Promise 提供統一的 API,可以異步操作都可以用同樣的方法進行處理。

Promise 對象有以下兩個特點:

? ? ? ? 1. Promise 對象代表一個異步操作,有三種狀態:Pending(進行中),Resolved(已完成),和 Rejected(已失敗)。只有異步操作的結果,可以決定當前是哪一種狀態。

? ? ? ? 2. 一旦狀態改變,就不會再發生變化。

Promise 基本用法

    <script>let promise = new Promise(function (resolve, reject) {console.log("promise do some code.....")resolve("promise success")})// 等待 promise 對象狀態發生變化時才會執行的代碼promise.then(function (value) {// promise 轉換為 resolved 狀態時 會執行的函數console.log('promise success' + value)}).catch(function (value) {// promise 轉換為 reject 會執行的函數console.log("promise fail" + value)})console.log('other code1')console.log("other code 2")</script>

async 和 await 的使用

async 表示函數的:

? ? ? ? 1. async 標識函數后,async 函數的返回值會編程一個 Promise 對象

? ? ? ? 2. 如果函數內部返回的數據是一個非 Promise 對象,async 函數的記過會返回一個成功狀態的 Promise 對象

? ? ? ? 3. 如果函數內部返回的是一個 Promise 對象,則 async 函數返回的狀態與結果由該對象決定

? ? ? ? 4. 如果函數內部拋出的是一個異常,則 async 函數返回一個失敗的 Promise 對象

? ? ? ? 5. async 其實就是幫助我們用簡潔的語法來獲得一個 promise 對象~

    <script>async function fun1() {// return 10// throw new Error("somthing wrong")let promise = Promise.reject("hehe")return promise}let promise = fun1()promise.then(function(value){console.log("success" + value)}).catch(function(value){console.log("fail" + value)})</script>

await:

? ? ? ? 1. await 右側的表達式一般為一個 Promise 對象,但也可以是一個其他值

? ? ? ? 2. 如果表達式是 Promise 對象,await 返回的是 Promise 成功的值

? ? ? ? 3. 如果表達式是其他的值,則直接返回該值

? ? ? ? 4. 如果表達式是一個失敗狀態的 promise,那么 await 會直接拋異常

? ? ? ? 5. await 會等右邊的 Promise 對象執行結束,然后再獲取結果,所在方法的后續代碼也會繼續等待 await 執行

? ? ? ? 6. await 必須在 async 函數中,但是 async 函數中可以沒有 await

? ? ? ? 7. await 其實就算給我們提供了一個快捷獲得 Promise 對象成功狀態的語法

    <script>async function fun1() {return 10}async function fun2() {// let res = await fun1() // 會返回一個 10 普通值let res = await Promise.reject("something wrong")console.log("await got" + res)}fun2()</script>

Axios 介紹

AJAX:

我們在前面提到了 AJAX,AJAX 可以在步重新加載整個頁面的情況下,與服務器交換數據,并更新部分網頁內容。前面我們使用 XMLHttpRequest 只是實現 Ajax 的一種方式,本次我們使用 Vue Axios 方式來實現。

Axios 入門案例

案例需求:請求后臺獲取隨機土味情話

請求的 URL:https://api.uomg.com/api/rand.qinghua

請求的方式: GET/POST

數據返回的格式:{"code":1,"content":"我努力不是未來"}

2. 準備項目

npm create vite@4.3.2

npm i

npm i axios

<script setup>import axios from 'axios'import {ref,reactive} from 'vue'let message = reactive({"code":1,"content":"88888"})function getLoveMessage(){// 使用 axios 發送請求// axios({設置請求的參數}) 請求三要素:1. 請求的 url 2. 請求的方式 3. 請求的參數let promise = axios({url:'https://api.uomg.com/api/rand.qinghua',method:'get',data:{// 當請求的方式為 post 的時候,data 中的數據會以 JSON 串形式放入請求體,否則會以keyvalue 的形式放在 url 后}})promise.then(function (response) {console.log(response)// response 響應結果對象// data 服務端響應回來的數據// status 響應狀態碼 200// headers 本次響應所有的響應頭// request 本次請求發送時使用的 XMLHttpRequest 對象// message.code = response.data.code// message.content=response.data.contentObject.assign(message,response.data) // 這個函數會將后面這個對象的同名屬性值賦值給前面對象的同名屬性值}).catch(function(error){console.log(error)})}// axios 可以簡寫function getLoveWords() {return axios({url:'https://api.uomg.com/api/rand.qinghua',method:'post',data:{}})}//  簡化1// function getLoveMessage2() {//   let promise = getLoveWords()//   promise.then(//     function(response){//       Object.assign(message,response.data)//     }//   )// }// // 簡化2
//     async function getLoveMessage2(){
//       let response = await getLoveWords()
//       Object.assign(message, response.data)
//     }//簡化3async function getLoveMessage2() {// let {data} 為對象結構賦值語法,從一個對象中提取指定的元素let {data} = await getLoveWord()Object.assign(message,response.data)}
</script><template><div><h1 v-text="message"></h1><button @click="getLoveMessage()">change</button></div>
</template><style scoped>
</style>

Axios 的 get 和 post 方法

配置添加語法:

測試 axios 的get 方法:

<script setup type="module">
import axios from 'axios'
import { onMounted, reactive } from 'vue';
let jsonData = reactive({code:1, content:'我努力不是為了你而是因為你'})let getLoveWords = async () => {try {return await axios.get('https://api.uomg.com/api/rand.qinghua',{params: { // 向url后添加的鍵值對參數format: 'json',username: 'zhangsan',password: '123456'},headers: { // 設置請求頭'Accept': 'application/json, text/plain, text/html,*/*'}})} catch (e) {return await e}
}let getLoveMessage = async () => {let { data } = await getLoveWords()Object.assign(jsonData, data)
}/* 通過onMounted生命周期,自動加載一次 */
onMounted(() => {getLoveMessage()
})
</script><template><div><h1>今日土味情話:{{jsonData.content}}</h1><button @click="getLoveMessage">獲取今日土味情話</button></div>
</template><style scoped>
</style>

測試 axios 的post 方法:

<script setup type="module">
import axios from 'axios'
import { onMounted, reactive } from 'vue';
let jsonData = reactive({code:1, content:'我努力不是為了你而是因為你'})
let getLoveWords = async () => {try {return await axios.post('https://api.uomg.com/api/rand.qinghua',{ // 請求體中的JSON數據username: 'zhangsan',password: '123456'},{ // 其他參數params: { // url上拼接的鍵值對參數format: 'json'},headers: { // 請求頭'Accept': 'application/json, text/plain, text/html,*/*','X-Requested-With': 'XMLHttpRequest'}})} catch (e) {return await e}
}
let getLoveMessage = async () => {let { data } = await getLoveWords()Object.assign(jsonData, data)
}
/* 通過onMounted生命周期,自動加載一次 */
onMounted(() => {getLoveMessage()
})
</script><template><div><h1>今日土味情話:{{jsonData.content}}</h1><button @click="getLoveMessage">獲取今日土味情話</button></div>
</template><style scoped>
</style>

Axios 攔截器

在 axios 發送請求之前,或者是數據想贏回來執行 then 方法之前做一些工作,可以使用攔截器完成:

App.vue:

<script setup>import request from './axios'import {reactive} from 'vue'let message = reactive({"code":1,"content":xxxxxxxx,})function getLoveWord(){return request.post("https://api.uomg.com/api/rand.qinghua")}async function getLoveMessage() {let {data} = await getLoveWord()Object.assign(message,response.data)}</script><template><div><h1 v-text="message"></h1><button @click="getLoveMessage()">change</button></div>
</template><style scoped>
</style>

axuis.js:

import axios from 'axios'// 使用 axios 函數創建一個可以發送請求的實例對象
const instance = axios.create({})// 設置請求攔截器
instance.interceptors.request.use((config) => {console.log('請求前攔截器')// 請求之前,設置請求信息的方法config.headers.Accept="application/json,text/plain,text/html,*/*"// 設置完畢后 必須要返回 configreturn config},function(error) {console.log("請求前攔截器異常方法")// 返回一個失敗狀態的 promisereturn Promise.reject("something wrong")}
)instance.interceptors.response.use(//響應狀態碼為 200 要執行的方法// 處理相應數據// 最后要返回 responsefunction(response){console.log("reponse success:")console.log(response)return response},function(error) {console.log("response fail")console.log(error)// 最后一定要響應一個 promisereturn Promise.reject("something wrong")}
)//默認導出 instance
export default instance

完!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/98510.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/98510.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/98510.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

怎么選適合企業的RPA財務機器人?

對于大多數財務人來說&#xff0c;“月初月末就是噩夢”已經成了常態&#xff1a;一邊要面對堆積如山的單據和報表&#xff0c;一邊還要應付領導不斷加碼的工作&#xff0c;常常忙到深夜&#xff0c;卻總覺得自己陷在重復事務中難有成長。其實&#xff0c;這并不是個體問題&…

html css js網頁制作成品——HTML+CSS無窮網頁設計(5頁)附源碼

目錄 一、?????網站題目 二、??網站描述 三、??網站介紹 四、??網站效果 五、?? 代碼實現 ??HTML

AUTOSAR進階圖解==>AUTOSAR_SWS_PDURouter

AUTOSAR PDU Router詳解文檔 AUTOSAR通信架構中的核心路由模塊目錄 1. 概述2. PDU Router模塊架構3. PDU Router配置模型4. PDU Router路由流程5. PDU Router狀態機6. 總結 1. 概述 PDU Router模塊是AUTOSAR通信架構中的核心組件&#xff0c;負責在AUTOSAR軟件組件之間路由I-…

RHEL7.9、RHEL9.3——源碼安裝MySQL

目錄 一、環境部署 1. 克隆rhel7.9虛擬機 二、源碼安裝MySQL 1. 準備工作 2. 源碼部署mysql8.0.40 1&#xff09;安裝編譯mysql所需軟件包 2&#xff09;編譯安裝mysql8.0.40 3&#xff09;生成啟動腳本 一、環境部署 1. 克隆rhel7.9虛擬機 改名為 “RHEL79_mysql_master” 并…

解決Win11 安全中心刪掉存在隱患的工具

打開設置&#xff0c; 找到Windows安全中心&#xff0c;找到病毒和威脅防護&#xff0c;選擇排除項&#xff0c;點 添加或刪除排除項添加文件&#xff0c;文件夾&#xff0c;工具按照自己需求選擇。或&#xff0c;刪除文件注意&#xff1a;隱患的工具或者文件安裝或者用完&…

通過URI Scheme實現從Web網頁上打開本地C++應用程序(以騰訊會議為例,附完整實現源碼)

目錄 1、需求描述 2、選擇URI Scheme實現 3、何為URI Scheme&#xff1f; 4、將自定義的URL Scheme信息寫入注冊表的C源碼實現 5、如何實現最開始的3種需求 6、后續需要考慮的細節問題 之前陸續收到一些從Web頁面上啟動我們C客戶端軟件的需求&#xff0c;希望我們能提供一…

機器學習02——模型評估與選擇(過擬合與欠擬合、K折交叉驗證、均方誤差、混淆矩陣)

上一章&#xff1a;機器學習01——機器學習概述 下一章&#xff1a;機器學習03——線性模型 機器學習實戰項目&#xff1a;【從 0 到 1 落地】機器學習實操項目目錄&#xff1a;覆蓋入門到進階&#xff0c;大學生就業 / 競賽必備 文章目錄一、經驗誤差與過擬合&#xff08;一&a…

基于 Django 與 Bootstrap 構建的現代化設備管理平臺

整體步驟概覽 創建項目和應用設計模型&#xff08;Model&#xff09; - 定義設備的數據結構配置用戶認證&#xff08;Auth&#xff09; - 使用 Django 自帶的強大用戶系統創建視圖&#xff08;View&#xff09; - 處理業務邏輯&#xff1a;登錄、列表、增刪改查編寫模板&#x…

微軟依舊穩定發揮,Windows 最新更新性能「開倒車」

微軟在前不久為Release Preview測試用戶推送了最新Windows11 25H2版本。按照慣例&#xff0c;正式版將于9月或者10月與咱們見面。雖然看起來是個跨版本的大更新&#xff0c;但是更新方式將服務堆棧更新&#xff08;SSU&#xff09;與最新累積更新&#xff08;LCU&#xff09;。…

一手實測,文心x1.1的升級很驚喜啊

一手實測&#xff0c;文心x1.1的升級很驚喜啊 前言 月9日&#xff0c;在 WAVE SUMMIT深度學習開發者大會上 百度發布了一個新的思考模型文心x1.1&#xff1a; X1 Turbo 升級為 X1.1 了。 文心4.5 Turbo 和 X1 Turbo 是2025年4月25日發布的&#xff0c;距今已經半年過去了&…

Flask 核心基礎:從 路由裝飾器 到 __name__ 變量 的底層邏輯解析

Flask 核心基礎&#xff1a;從路由裝飾器到 name 變量的底層邏輯解析 在使用 Flask 開發 Web 應用時&#xff0c;我們總會從 app Flask(__name__) 和 app.route("/") 這兩行代碼開始。看似簡單的語法背后&#xff0c;藏著 Python 裝飾器機制與 Flask 框架設計的核心…

中國AI云市場報告:阿里云份額達35.8%,高于2至4名總和

9月9日&#xff0c;國際權威市場調研機構英富曼&#xff08;Omdia&#xff09;發布《中國AI云市場&#xff0c;1H25》報告&#xff0c;報告顯示&#xff0c;2025年上半年&#xff0c;中國AI云市場規模達223億元&#xff0c;阿里云占比35.8%位列第一&#xff0c;市場份額高于2到…

鴻蒙Next開發指南:UIContext接口解析與全屏拉起元服務實戰

前言在鴻蒙應用開發過程中&#xff0c;我們經常會遇到需要獲取UI上下文實例或者在非UI上下文中調用UI相關方法的場景。隨著HarmonyOS NEXT的不斷發展&#xff0c;UIContext API為我們提供了更加優雅的解決方案。本文將詳細介紹如何使用UIContext中對應的接口獲取與實例綁定的對…

leaflet讀取mvt格式

如圖所示&#xff0c;是全國的數據&#xff0c;截圖是部分數據先安裝&#xff1a;npm install leaflet npm install leaflet.vectorgrid如果是其余的框架直接用就行&#xff1a;import * as L from leaflet; import leaflet.vectorgrid;我用的是angular,所以是ts中聲明&#xf…

OSG中交互(鼠標、鍵盤)處理

OpenSceneGraph (OSG) 中的交互處理,包括鼠標和鍵盤事件。 一、OSG 事件處理體系 OSG 使用一個基于訪問者模式的事件處理體系,核心類包括: osgGA::GUIEventHandler: 所有事件處理器的基類 osgViewer::Viewer: 查看器,管理事件隊列和分發 osgGA::EventQueue: 事件隊列…

微碩雙N-MOS管WST3392在汽車智能氛圍燈系統中的應用

汽車智能氛圍燈系統是現代車輛提升駕乘體驗的重要配置&#xff0c;其多通道LED的精密調光與控制需選用高性能、小體積的功率開關器件。微碩WINSOK的WST3392是一款雙N溝道MOS管&#xff0c;具有30V耐壓、3.7A連續電流和46mΩ的低導通電阻&#xff0c;特別適用于氛圍燈系統中的多…

深入 Kubernetes:從零到生產的工程實踐與原理洞察

&#x1f31f; Hello&#xff0c;我是蔣星熠Jaxonic&#xff01; &#x1f308; 在浩瀚無垠的技術宇宙中&#xff0c;我是一名執著的星際旅人&#xff0c;用代碼繪制探索的軌跡。 &#x1f680; 每一個算法都是我點燃的推進器&#xff0c;每一行代碼都是我航行的星圖。 &#x…

為何三折疊手機只有華為可以?看華為Mate XTs非凡大師就知道

9月4日&#xff0c;華為在深圳舉行華為Mate XTs非凡大師及全場景新品發布會&#xff0c;不同于過往手機發布會對芯片配置只字不提&#xff0c;此次發布會公開展示了華為Mate XTs非凡大師內部芯片配置——麒麟9020芯片&#xff0c;時隔四年&#xff0c;終于在發布會上看到芯片公…

TensorFlow 2.x 核心 API 與模型構建

TensorFlow 2.x 核心 API 與模型構建TensorFlow 是一個強大的開源機器學習庫&#xff0c;尤其在深度學習領域應用廣泛。TensorFlow 2.x 在易用性和效率方面做了大量改進&#xff0c;引入了Keras作為其高級API&#xff0c;使得模型構建和訓練更加直觀和便捷。本文將介紹 TensorF…

TENGJUN防水TYPE-C連接器:工業級防護,認證級可靠,賦能嚴苛場景連接

在工業控制、戶外電子、水下設備等對連接穩定性與防護性要求極致的場景中&#xff0c;TENGJUN防水TYPE-C連接器以“硬核性能全面認證”的雙重優勢&#xff0c;成為關鍵連接環節的信賴之選。從結構設計到認證標準&#xff0c;每一處細節都為應對復雜環境而生&#xff0c;重新定義…