ajax與axios的使用和對比


ajax與axios的使用和對比

ajax

Ajax 即“Asynchronous Javascript And XML”(異步 JavaScript 和 XML),是指一種創建交互式網頁應用的網頁開發技術
Ajax = 異步 JavaScript 和 XML 或者是 HTML(標准通用標記語言的子集)
Ajax 是一種用於創建快速動態網頁的技術
Ajax 是一種在無需重新加載整個網頁的情況下,能夠更新部分網頁的技術
通過在后台與服務器進行少量數據交換,Ajax 可以使網頁實現異步更新。這意味着可以在不重新加載整個網頁的情況下,對網頁的某部分進行更新
傳統的網頁(不使用 Ajax)如果需要更新內容,必須重載整個網頁頁面
參考百度百科

優點:

在頁面無刷新的情況下與服務器通訊維護數據,用戶體驗好
異步通訊方式,不打斷用戶操作,響應能力迅速
把一些請求轉到客戶端,“按需取數據”,最大程度的減少冗余請求和對服務器造成的負擔
基於標准化的並被廣泛支持的技術,不需要下載瀏覽器插件或者小程序
使用:

1. 原生 ajax

ajax 的核心是 JavaScript 對象 XmlHttpRequest

GET 請求方式

//創建 XMLHttpRequest對象
var xhr = new XMLHttpRequest()

//打開要發送請求的地址,get發送請求時參數要放在url中
xhr.open("get","https://me.csdn.net/weixin_45426836?a=1&b=2",true)

//發送請求
xhr.send()

//監聽請求狀態,接收響應數據,onload 等於 xhr.readyState == 4
xhr.onload = function(){
if(xhr.status == 200) {
console.log(xhr.response) //通過xhr的response獲取到響應的響應體
}else {
console.log(error)
}
}

POST 請求方式

//創建 XMLHttpRequest對象
var xhr = new XMLHttpRequest()

//打開要發送請求的地址
xhr.open("post","https://me.csdn.net/weixin_45426836",true)

//設置請求頭
xhr.setRequestHeader("content-type","application/x-www-form-urlencoded");

//發送請求,post發送請求時參數要放在send中
xhr.send("a=1&b=2")

//監聽請求狀態,接收響應數據,xhr.readyState == 4 等於 onload
xhr.onreadystatechange = function(){
if(xhr.readyState == 4 && xhr.status == 200) {
console.log(xhr.response) //通過xhr的response獲取到響應的響應體
}else {
console.log(error)
}
}

XMLHttpRequest API 屬性

readyState: xhr的狀態,請求響應過程的當前活動階段
status: 響應的http狀態
statusText: 響應的http狀態的字符串信息說明
responseText: 響應的數據文本
responseXML: 響應的DOM兼容的文檔數據對象
onreadystatechange: 事件,當 xhr.readyState 屬性發生改變觸發
onload: 事件,響應接收完畢觸發

XMLHttpRequest API 方法

open(method, url, async): 打開要發送請求的地址,參數:請求方式、請求的url地址、請求是否異步的布爾值(默認true)
send(requsetBody): 發送請求(體)
setRequestHeader(key, value): 設置請求頭
getResponseHeader(key): 獲取響應頭

XMLHttpRequest 對象的 readyState 屬性,表示請求響應過程的當前活動階段:

0: 未初始化,創建了XMLHttpRequest對象,但未調用open()方法
1: 啟動,已經調用open()方法,但未調用send()方法
2: 發送,已經調用send()方法,但未接收到響應
3: 接收,已經接收到部分響應數據
4: 完成,已經接收到全部響應數據,並且可以在客戶端使用

2. jquery將ajax封裝成了一個函數 $.ajax(),我們可以直接用這個函數來執行ajax請求

常用參數:

url : 請求的 URL 地址
type : 請求方式,默認是 GET,常用的還有 POST
async : 請求是否異步,默認值是 true,表示異步,false 表示同步
dataType : 返回的數據類型,常用的是 json 格式
contentType: 請求的數據類型,默認為"application/x-www-form-urlencoded"
data : 請求的數據參數
success : 請求成功后的回調函數
error : 請求失敗后的回調函數

$.ajax({
url: 'https://me.csdn.net/weixin_45426836',
type: 'get',
dataType: 'json',
data: {
//'a': 1,
//'b': 2
},
success: function (data) {
console.log(data)
},
error: function (err) {
console.log(err)
}
})

GET 請求方式 $.get()

$.get("https://me.csdn.net/weixin_45426836", {
//'a': 1,
//'b': 2
},function (data) {
console.log(data)
})

POST 請求方式 $.post()

$.post("https://me.csdn.net/weixin_45426836", {
//'a': 1,
//'b': 2
},function (data) {
console.log(data)
})

axios

axios 是一個基於promise 的 http 庫,可以用於瀏覽器和 nodejs 中

優點:

從瀏覽器中創建 XMLHttpRequests
從 node.js 創建 http 請求
支持 Promise API
攔截請求和響應
轉換請求數據和響應數據
取消請求
自動轉換 JSON 數據
客戶端支持防御 XSRF
使用:

通過向 axios 傳遞相關配置來創建請求

常用參數:

url : 請求的 URL 地址
method : 請求方式,默認是 GET,常用的還有 POST
baseURL: baseURL 將自動加在 url 前面,除非 url 是一個絕對 URL
responseType : 返回的數據類型,常用的是 json 格式
headers: 請求的自定義請求頭
params : 與請求一起發送的 URL 參數
data : 請求的數據參數,只適用於 PUT, POST, 和 PATCH

axios({
url: 'https://me.csdn.net/weixin_45426836',
method: 'get',
responseType: 'json',
params: {
//'a': 1,
//'b': 2,
}
}).then(function (data) {
console.log(data)
}).catch(function (err) {
console.log(err)
})

執行 GET 請求

axios.get('https://me.csdn.net/weixin_45426836', {
params: {
//'a': 1,
//'b': 2,
}
}).then(function (data) {
console.log(data)
}).catch(function (err) {
console.log(err)
})

執行 POST 請求

axios.post('https://me.csdn.net/weixin_45426836', {
//'a': 1,
//'b': 2,
}).then(function (data) {
console.log(data)
}).catch(function (err) {
console.log(err)
})

使用 axios.all 處理並發請求

function getOne() {
return axios.get('https://me.csdn.net/weixin_45426836', {
params: {
//'a': 1
}
});
}
function getTwo() {
return axios.get('https://me.csdn.net/weixin_45426836', {
params: {
//'b': 2
}
});
}
axios.all([getOne(), getTwo()])
.then(axios.spread(function (one, two) {
console.log(one)
cosnoel.log(two)
}))

全局 axios 默認值

axios.defaults

// 全局默認的baseURL
axios.defaults.baseURL = 'https://me.csdn.net/weixin_45426836'

axios 攔截器

在請求或響應被 then 或 catch 處理前攔截它們,進行一些操作

// 添加請求攔截器
axios.interceptors.request.use(function (config) {
// 在發送請求之前做些什么
return config;
}, function (error) {
// 對請求錯誤做些什么
return Promise.reject(error);
});

// 添加響應攔截器
axios.interceptors.response.use(function (response) {
// 對響應數據做點什么
return response;
}, function (error) {
// 對響應錯誤做點什么
return Promise.reject(error);
});

ajax 與 axios 的根本區別

axios 是基於promise實現的對 ajax 技術的一種封裝,兩者用法基本一樣,個別參數不同,axios 封裝了一些更簡便的 ajax 操作
axios 是 ajax,但是 ajax 不限於 axios


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM