xhr/fetch/axios串api

閱讀時間約 9 分鐘

範例 API 與前置作業

  1. RANDOM USER GENERATOR
  2. 基本架構 :


HTML​ :

<button id="fetch-data">Fetch Data</button>
<div id="data"></div>

Javascript​ :

const fetch-data= document.querySelector("#fetch-data")

const data= document.querySelector("#data")

let apiUrl = 'https://randomuser.me/api/'

let name = ''

let img = ''

let email = ''


  1. xhr

在下面的例子裡,我們首先建立了一個 XMLHttpRequest 物件,並使用 .open() 開啟一個 URL,最後使用 .send() 發出 request。


 fetchDataButton.addEventListener("click", function () {
dataDiv.innerHTML = '<p class="loading">Loading...</p>';

// 使用 XMLHttpRequest 發送 GET 請求到 API
let ​xhr = new XMLHttpRequest();
// 開啟一個請求,這裡使用 GET,true 為非同步的意思
xhr.open("GET", apiUrl, true);
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
try {
const response = JSON.parse(xhr.responseText);
let user = response.results[0];
let userInfo = `
<h2>${user.name.title} ${user.name.first} ${user.name.last}</h2>
<p>Gender: ${user.gender}</p>
<p>Email: ${user.email}</p>
<p>Location: ${user.location.city}, ${user.location.country}</p>
<img src="${user.picture.large}" alt="User Picture">
`;
dataDiv.innerHTML = userInfo;
} catch (e) {
dataDiv.innerHTML = '<p class="error">Error parsing response.</p>';
console.error("Error parsing response:", e);
}
} else {
dataDiv.innerHTML = `<p class="error">Error fetching data. Status: ${xhr.status}</p>`;
}
}
};
// 送出請求
xhr.send();
});



  1. Fetch API:這是瀏覽器原生提供的一個用於數據取得的介面,基於Promise設計,需要手動調用.json轉換為JSON對象。它是Ajax的一種現代化替代方案。
Fetch API 會需要我們手動進行 JSON 解析,所以需要 response.json(),而 Axios 會直接幫我們解析 JSON。


function fetchData() {
fetch("https://randomuser.me/api/")
.then((response) => {
if (!response.ok) {
throw new Error("Network response was not ok " + response.status);
}
return response.json();
})
.then((data) => {
document.getElementById("output").textContent = JSON.stringify(
data,
null,
2
);
})
.catch((error) => {
console.error("There was a problem with the fetch operation:", error);
document.getElementById("output").textContent = "Error: " + error.message;
});
}


  1. Axios

需要額外引入Axios 庫, Axios 可以在 Node.js 環境中使用。

Axios 預設也會自動處理所有的 HTTP 狀態,包括錯誤的狀態。如果請求成功(HTTP 狀態碼在 200 到 299 之間),則會進入 .then 回調函數;如果請求失敗(HTTP 狀態碼在 200 到 299 以外)則會進入 .catch 回調函數。


fetchDataButton.addEventListener("click", function () {
dataDiv.innerHTML = '<p class="loading">Loading...</p>';

// 使用 axios 發送 GET 請求到 API
axios
.get(apiUrl)
.then(function (response) {
const user = response.data.results[0];
const userInfo = `
<h2>${user.name.title} ${user.name.first} ${user.name.last}</h2>
<p>Gender: ${user.gender}</p>
<p>Email: ${user.email}</p>
<p>Location: ${user.location.city}, ${user.location.country}</p>
<img src="${user.picture.large}" alt="User Picture">
`;
dataDiv.innerHTML = userInfo;
})
.catch(function (error) {
dataDiv.innerHTML = '<p class="error">Error fetching data.</p>';
console.error("Error fetching data:", error);
});
});






    2會員
    13內容數
    留言0
    查看全部
    發表第一個留言支持創作者!
    郭欣玫的沙龍 的其他內容
    CSS - margin、padding
    閱讀時間約 1 分鐘
    父子組件資料傳遞 props、emit
    閱讀時間約 5 分鐘
    Vue-依賴注入 provide & inject
    閱讀時間約 2 分鐘
    CSS 元素置中
    閱讀時間約 3 分鐘
    RGB to HEX
    閱讀時間約 8 分鐘
    空間佈局屬性說明
    閱讀時間約 1 分鐘
    你可能也想看
    惠譽(fitch)降評後資金停泊美債的思考先說重點:「買美債是為了賺價差,故偏好利率敏感度較高的長債」。  台灣股票的配股配息除了要被扣健保補充保費,當所得稅率超過20%,遇到每年5月的繳稅時股利還要計入個人所得再被刮一層皮,雖可透過借券方式避稅降低稅負成本,但向你借券的相對方也不是傻子,個人經驗是會有一定比例在配息前幾天還券,導致無法有
    Thumbnail
    avatar
    蘇波麟
    2023-08-04
    惠譽(Fitch Ratings)週二宣布,將美國信用評級AAA,下調一級至AA+;原來還有正常人!!又在那邊收盤發震撼消息,果然不講武德。還好我本來就看空🤣 原來還有理性的機構靜靜的觀察一切。 距離上次美國被調降信評是2011/8/5 然後就一路烙賽。 這次會發生什麼事呢~我們接著看下去 #今天結算見轉折,關鍵位置17238 站上偏多,沒站上偏空 #祝大家操作順利
    Thumbnail
    avatar
    大俠愛吃漢堡堡
    2023-08-02
    JavaScript 中使用fetch的AbortController和取消功能:如何在Go 實現 有多種情況下我們需要從API取消請求: 如果我們正在建立一個支付系統,並且請求一直進行,但使用者希望立即取消這筆訂單。這就是為什麼開發者會建立這個功能的原因。 從電子商務購買商品。使用者意外關閉了頁面,無法立即返回上一頁。 訂閱取消。 ......等等 這將對對這個系統沒有信心的使用者產生影響。因
    Thumbnail
    avatar
    Ho Michael
    2023-05-14
    AJAX // XHR 練習AJAX // XHR是什麼: 利用 Javascript 程式進行連線 近期使用最新的 fetch fetch 函示基本語法: 處理不同格式的語法: 根據連線後回傳的資料格式, 寫出相對應的程式 取得純文字資料的回應 取得 JSON 資料的回應 練習:
    avatar
    Yu Chun
    2023-03-30
    🇹🇷土耳其 Fethiye |飛行傘+土耳其浴初體驗我從Kas搭巴士到Fethiye,待4天3夜 (2022/9/28-10/1),再從Dalaman機場離開,在Fethiye嘗試了飛行傘、土耳其浴、看世界飛行傘比賽、爺爺們打土耳其麻將等等,在此分享心得跟攻略給大家!
    Thumbnail
    avatar
    安的獨旅日記
    2022-10-15
    [13] Compare axios, ajax, fetch接下來要講前後端怎麼溝通,最常見應該都是用 axios, ajax 或 fetch 來 call api。先講結論,個人推薦使用 axios,那他們又有什麼優缺點呢?讓我簡單講解一下 ajax ajax 用法有點麻煩,要先引入 jQuery,用法如下 ajax 比起 axios 較為笨重也較不安全
    Thumbnail
    avatar
    張哲嘉
    2022-10-07
    【美國省錢】掃描發票就可兌換禮物卡的省錢神器│Fetch RewardsFetch Rewards的企業標語是「make your life easier and more rewarding」。創辦人Wes Schroll在大學時意識到,除非在對的時間、使用對的優惠券、前往對的商店、購買對的產品,才有可能省到一筆小錢,因此才有了設計此App的構想。
    Thumbnail
    avatar
    謝伊太太
    2021-12-30
    【Dugout Star】大兵小將-David Fletcher「那支二壘安打對我來說就像一見鍾情。」當時執教於小熊,現在則是天使主帥的傳奇教頭梅登(Joe Maddon)說到:「佛萊契(David Fletcher)是那種會在現代棒球裡被忽視的選手。」
    Thumbnail
    avatar
    Mike Z
    2021-02-02
    O球人壽XHR,加強實支實付,雜費條款範圍大,小錢換地圖炮全O人壽XHR 保經界實支實付防線最強候補之一,補強其他家不足的住院醫療雜費,門診手術雜費等等,O球人壽的XHR,也是網路上推薦商品組合之前五名,它是你口袋中最重要的實支實付配角之一,但有一點你要注意...
    Thumbnail
    avatar
    A957煉金商會小二
    2018-12-31
    范孝丹(Daniel Feucht)加入BBDO黃禾擔任策略總監文、圖/BBDO黃禾提供   范孝丹(Daniel Feucht)在上海工作的7年中累積了豐富的行銷經驗。他涉略多重領域,包括體驗行銷、數位以及社群媒體策略發展等等,他更曾與許多一線國際品牌合作,包括保時捷、賓士、Jaguar、Land Rover、Bacardi Group,無庸置疑的,汽車產業
    Thumbnail
    avatar
    廣告雜誌
    2016-12-09