JavaScript中的get方法是用于獲取數(shù)據(jù)的一種常用方式,當(dāng)然也有post方法可以用于傳輸數(shù)據(jù),不過本文主要討論get方法。
使用get方法獲取數(shù)據(jù)的步驟比較簡(jiǎn)單,只需向某個(gè)URL發(fā)送請(qǐng)求即可,例如:
let request = new XMLHttpRequest(); request.open('GET', 'https://api.example.com/data', true); request.send();
以上代碼中,我們創(chuàng)建了一個(gè)XMLHttpRequest對(duì)象用于發(fā)送請(qǐng)求,并指定了請(qǐng)求類型為GET。我們請(qǐng)求的URL是https://api.example.com/data,同時(shí)指定了異步請(qǐng)求為true,表示我們希望在數(shù)據(jù)返回完成之前不會(huì)阻塞 JavaScript 的執(zhí)行。
如果我們需要傳遞一些參數(shù)給服務(wù)器,可以在URL中添加查詢參數(shù),例如:
let request = new XMLHttpRequest(); request.open('GET', 'https://api.example.com/data?id=123&name=John', true); request.send();
以上代碼中,我們?cè)赨RL中添加了兩個(gè)查詢參數(shù)id和name,它們的值分別為123和John。
在接收到服務(wù)器返回的數(shù)據(jù)之后,我們需要對(duì)數(shù)據(jù)進(jìn)行處理。我們可以通過onreadystatechange事件來監(jiān)聽請(qǐng)求狀態(tài)的變化,例如:
let request = new XMLHttpRequest(); request.onreadystatechange = function() { if (this.readyState === XMLHttpRequest.DONE && this.status === 200) { console.log(this.responseText); } }; request.open('GET', 'https://api.example.com/data', true); request.send();
以上代碼中,我們?cè)趧?chuàng)建XMLHttpRequest對(duì)象后,為其設(shè)置了一個(gè)onreadystatechange事件,該事件在請(qǐng)求狀態(tài)發(fā)生變化后自動(dòng)觸發(fā)。當(dāng)readyState變?yōu)閄MLHttpRequest.DONE,而且狀態(tài)碼為200時(shí),代表請(qǐng)求成功,我們可以通過responseText屬性來獲取服務(wù)器返回的數(shù)據(jù)。
在實(shí)際開發(fā)中,我們通常會(huì)將get方法封裝成一個(gè)函數(shù)來使用。例如以下代碼:
function ajaxGet(url, callback) { let request = new XMLHttpRequest(); request.onreadystatechange = function() { if (this.readyState === XMLHttpRequest.DONE && this.status === 200) { callback(this.responseText); } }; request.open('GET', url, true); request.send(); }
以上代碼封裝了一個(gè)ajaxGet方法,可以接收兩個(gè)參數(shù)url和callback。其中url表示請(qǐng)求的URL地址,callback用于處理服務(wù)器返回的數(shù)據(jù)。例如,在業(yè)務(wù)邏輯中我們可以這樣使用:
ajaxGet('https://api.example.com/data', function(data) { console.log(data); });
最后,需要注意的是,get方法在請(qǐng)求數(shù)據(jù)時(shí)會(huì)將數(shù)據(jù)暴露在URL中,因此也會(huì)將數(shù)據(jù)暴露在瀏覽器地址欄中。因此,get方法不適合用于傳輸敏感數(shù)據(jù)。如果需要傳輸敏感數(shù)據(jù),應(yīng)使用post方法進(jìn)行數(shù)據(jù)傳輸。