Ajax與Axios的基礎(chǔ)知識(shí)以及詳細(xì)對(duì)比總結(jié)
一、引言
在現(xiàn)代Web開(kāi)發(fā)中,前端與后端的數(shù)據(jù)交互是至關(guān)重要的一環(huán)。隨著前端技術(shù)的發(fā)展,越來(lái)越多的開(kāi)發(fā)者需要在不刷新整個(gè)頁(yè)面的情況下與服務(wù)器進(jìn)行數(shù)據(jù)交換。這種技術(shù)被稱為“異步數(shù)據(jù)請(qǐng)求”,而Ajax和Axios是實(shí)現(xiàn)這一功能的兩種常見(jiàn)方式。本文將深入淺出地介紹Ajax與Axios的基礎(chǔ)知識(shí),并對(duì)它們進(jìn)行詳細(xì)對(duì)比。
二、什么是Ajax?
2.1 Ajax的定義
Ajax是“異步JavaScript與XML”(Asynchronous JavaScript and XML)的縮寫(xiě)。盡管名稱中包含了XML,但Ajax并不局限于使用XML進(jìn)行數(shù)據(jù)交換,它還可以處理JSON、HTML、純文本等多種格式。Ajax的核心思想是允許網(wǎng)頁(yè)在不重新加載整個(gè)頁(yè)面的情況下,從服務(wù)器請(qǐng)求數(shù)據(jù)或發(fā)送數(shù)據(jù)到服務(wù)器。
圖片來(lái)自網(wǎng)絡(luò)
2.2 Ajax的工作原理
Ajax的工作原理可以通過(guò)以下幾個(gè)步驟來(lái)理解:
- 用戶操作:用戶在網(wǎng)頁(yè)上執(zhí)行某個(gè)操作(如點(diǎn)擊按鈕)。
- JavaScript觸發(fā):JavaScript監(jiān)聽(tīng)到用戶的操作,并通過(guò)XMLHttpRequest對(duì)象向服務(wù)器發(fā)送請(qǐng)求。
- 服務(wù)器處理請(qǐng)求:服務(wù)器接收到請(qǐng)求后進(jìn)行處理,并將數(shù)據(jù)返回給客戶端。
- JavaScript處理響應(yīng):客戶端的JavaScript接收到服務(wù)器的響應(yīng),并根據(jù)響應(yīng)內(nèi)容更新網(wǎng)頁(yè)的部分內(nèi)容。
代碼示例: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <script> function ajax1(){ let sno = document.querySelector(".sno").value; //1.創(chuàng)建ajax對(duì)象 let xmlHttpRequest = new XMLHttpRequest(); //2.設(shè)置請(qǐng)求方式和請(qǐng)求地址 xmlHttpRequest.open("GET","/Servlet_war_exploded/ajax3?sno="+sno,true); //3.監(jiān)聽(tīng)數(shù)據(jù)是否變化 xmlHttpRequest.onreadystatechange=function (){ if(xmlHttpRequest.readyState==4 && xmlHttpRequest.status==200){ //4.獲取數(shù)據(jù) let data =JSON.parse(xmlHttpRequest.responseText); //5.將數(shù)據(jù)顯示在頁(yè)面上 // document.querySelector("#id").innerHTML=data.sno; document.querySelector(".name").innerHTML=data.sname; document.querySelector(".sex").innerHTML=data.ssex; document.querySelector(".class").innerHTML=data.sclass; } } //4.發(fā)送請(qǐng)求 xmlHttpRequest.send(); } </script> <body> <h1>aja</h1> <div id="show"> id:<input type="text" class="sno" placeholder="id"><br> 姓名:<span class="name"></span><br> 姓別:<span class="sex"></span><br> 班級(jí):<span class="class"></span><br> </div> <button onclick="ajax1()">提交 </button> </body> </html>
2.4 Ajax的優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
- 提高用戶體驗(yàn):通過(guò)部分頁(yè)面刷新,用戶可以在不離開(kāi)當(dāng)前頁(yè)面的情況下獲取最新數(shù)據(jù),提升交互體驗(yàn)。
- 減少服務(wù)器負(fù)載:只更新頁(yè)面的一部分內(nèi)容,減少了服務(wù)器和網(wǎng)絡(luò)的負(fù)擔(dān)。
- 兼容性好:Ajax可以在絕大多數(shù)現(xiàn)代瀏覽器中運(yùn)行,無(wú)需依賴額外的庫(kù)。
缺點(diǎn):
- 代碼復(fù)雜:直接使用XMLHttpRequest對(duì)象進(jìn)行異步請(qǐng)求,代碼較為冗長(zhǎng),容易出錯(cuò)。
- 難以管理:如果異步請(qǐng)求過(guò)多,可能導(dǎo)致回調(diào)地獄,難以維護(hù)。
三、什么是Axios?
3.1 Axios的定義
Axios是一個(gè)基于Promise的HTTP客戶端,主要用于在瀏覽器和Node.js環(huán)境中發(fā)送異步請(qǐng)求。Axios簡(jiǎn)化了HTTP請(qǐng)求的過(guò)程,并且提供了更多便捷的功能,例如請(qǐng)求攔截、響應(yīng)攔截、錯(cuò)誤處理等。與原生的XMLHttpRequest對(duì)象相比,Axios的語(yǔ)法更加簡(jiǎn)潔,使用更加方便。其實(shí)Axios就是對(duì)Ajax的封裝。
官網(wǎng): Axios中文文檔 | Axios中文網(wǎng)
3.2 Axios的安裝與使用
在使用Axios之前,我們需要先安裝它。如果你使用的是前端構(gòu)建工具(如Webpack、Parcel等),可以通過(guò)npm或yarn安裝Axios:
npm install axios
或者:
yarn add axios
或者也可以直接導(dǎo)入axios.js文件到項(xiàng)目中。
安裝完成后,你可以在JavaScript文件中導(dǎo)入并使用它
import axios from 'axios'; axios.get('https://jsonplaceholder.typicode.com/posts/1') .then(response => { console.log(response.data); }) .catch(error => { console.error('Error fetching data:', error); });
在這個(gè)例子中,Axios通過(guò)axios.get()
方法發(fā)送了一個(gè)GET請(qǐng)求,并返回了一個(gè)Promise對(duì)象。我們可以通過(guò)then
方法處理成功的響應(yīng),通過(guò)catch
方法處理錯(cuò)誤。
3.3 Axios的功能特點(diǎn)
Axios除了基本的GET和POST請(qǐng)求外,還提供了其他的功能,可以更方便地處理HTTP請(qǐng)求。
- 支持Promise:Axios基于Promise封裝,支持鏈?zhǔn)秸{(diào)用和異步操作。
- 請(qǐng)求和響應(yīng)攔截器:你可以在請(qǐng)求或響應(yīng)被處理前,進(jìn)行預(yù)處理或修改。
- 自動(dòng)轉(zhuǎn)換JSON數(shù)據(jù):如果響應(yīng)的數(shù)據(jù)是JSON格式,Axios會(huì)自動(dòng)將其轉(zhuǎn)換為JavaScript對(duì)象。
- 客戶端支持取消請(qǐng)求:如果一個(gè)請(qǐng)求發(fā)出后不再需要,你可以輕松地取消它。
3.4 使用Axios的示例
下面是一個(gè)使用Axios發(fā)送POST請(qǐng)求的示例:
axios.post('https://jsonplaceholder.typicode.com/posts', { title: 'foo', body: 'bar', userId: 1 }) .then(response => { console.log(response.data); }) .catch(error => { console.error('Error posting data:', error); });
在這個(gè)示例中,我們通過(guò)axios.post()
方法發(fā)送了一個(gè)POST請(qǐng)求,將數(shù)據(jù)傳遞給服務(wù)器,并處理了響應(yīng)結(jié)果。
3.5 Axios的優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
- 語(yǔ)法簡(jiǎn)潔:相比XMLHttpRequest,Axios的語(yǔ)法更加簡(jiǎn)潔直觀,代碼可讀性更高。
- 功能豐富:Axios內(nèi)置了許多實(shí)用功能,如攔截器、錯(cuò)誤處理、取消請(qǐng)求等,減少了開(kāi)發(fā)者手動(dòng)編寫(xiě)的代碼量。
- 兼容性好:Axios可以在現(xiàn)代瀏覽器和Node.js中使用,且支持Promise語(yǔ)法。
缺點(diǎn):
- 需要引入額外的庫(kù):與Ajax不同,使用Axios需要引入外部庫(kù),增加了項(xiàng)目的依賴。
- 文件體積較大:Axios庫(kù)雖然不大,但相比直接使用Ajax會(huì)增加一些文件體積。
四、Ajax與Axios的對(duì)比
4.1 語(yǔ)法對(duì)比
首先,Ajax和Axios在語(yǔ)法上有明顯的差異。Ajax需要手動(dòng)創(chuàng)建XMLHttpRequest對(duì)象并設(shè)置各種參數(shù),而Axios則提供了更加簡(jiǎn)潔的API封裝。
Ajax:
var xhr = new XMLHttpRequest(); xhr.open('GET', 'https://jsonplaceholder.typicode.com/posts/1', true); xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { console.log(JSON.parse(xhr.responseText)); } }; xhr.send();
Axios:
axios.get('https://jsonplaceholder.typicode.com/posts/1') .then(response => { console.log(response.data); }) .catch(error => { console.error('Error fetching data:', error); });
可以看出,Axios通過(guò)封裝,將HTTP請(qǐng)求的處理變得更加簡(jiǎn)潔直觀。
4.2 功能對(duì)比
- 數(shù)據(jù)格式支持:Ajax和Axios都支持處理多種數(shù)據(jù)格式,但Axios會(huì)自動(dòng)處理JSON數(shù)據(jù)的轉(zhuǎn)換,而Ajax則需要手動(dòng)解析。
- 跨域支持:Ajax默認(rèn)情況下不支持跨域請(qǐng)求,需要借助CORS(跨域資源共享)或JSONP(JSON with Padding)技術(shù)。而Axios通過(guò)配置請(qǐng)求頭可以方便地處理跨域請(qǐng)求。
- 錯(cuò)誤處理:在Ajax中,錯(cuò)誤處理通常需要在
onreadystatechange
回調(diào)函數(shù)中進(jìn)行。而Axios基于Promise的結(jié)構(gòu),使得錯(cuò)誤處理更加直觀,支持鏈?zhǔn)秸{(diào)用。
4.3 兼容性對(duì)比
- 瀏覽器支持:Ajax是JavaScript的原生功能,可以在幾乎所有的現(xiàn)代瀏覽器中運(yùn)行。而Axios作為第三方庫(kù),雖然也支持大部分瀏覽器,但在非常老舊的瀏覽器中可能需要Polyfill(補(bǔ)?。﹣?lái)支持Promise。
- 環(huán)境支持:Ajax只能在瀏覽器環(huán)境中使用,而Axios不僅可以在瀏覽器中使用,還可以在Node.js等環(huán)境中運(yùn)行,具有更廣泛的適用性。
五、總結(jié)
Ajax與Axios作為前端開(kāi)發(fā)中常用的異步數(shù)據(jù)請(qǐng)求工具,各有優(yōu)劣。Ajax是JavaScript的原生方法,具有較好的兼容性和較少的依賴,但其使用起來(lái)相對(duì)繁瑣。Axios則是一個(gè)功能強(qiáng)大、易于使用的第三方庫(kù),提供了更加友好的API和豐富的功能,適合現(xiàn)代前端開(kāi)發(fā)需求。
到此這篇關(guān)于Ajax與Axios的基礎(chǔ)知識(shí)以及詳細(xì)對(duì)比總結(jié)的文章就介紹到這了,更多相關(guān)Ajax與Axios總結(jié)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript實(shí)現(xiàn)的貝塞爾曲線算法簡(jiǎn)單示例
這篇文章主要介紹了JavaScript實(shí)現(xiàn)的貝塞爾曲線算法,結(jié)合簡(jiǎn)單實(shí)例形式分析了基于javascript的貝塞爾曲線算法的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-01-01JS實(shí)現(xiàn)新浪博客左側(cè)的Blog管理菜單效果代碼
這篇文章主要介紹了JS實(shí)現(xiàn)新浪博客左側(cè)的Blog管理菜單效果代碼,可實(shí)現(xiàn)基于鼠標(biāo)點(diǎn)擊事件動(dòng)態(tài)操作頁(yè)面元素樣式的功能,界面美觀大方,簡(jiǎn)潔實(shí)用,需要的朋友可以參考下2015-10-10JavaScript 對(duì)Cookie 操作的封裝小結(jié)
通過(guò)本篇,您能了解到: 匿名函數(shù) 閉包的產(chǎn)生 JavaScript實(shí)現(xiàn)private 以及 public 訪問(wèn)權(quán)限 document.cookie 的操作2009-12-12vscode使用Prettier Code插件的詳細(xì)教程
這篇文章主要介紹了vscode使用Prettier Code插件的詳細(xì)教程,本文通過(guò)圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09