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);
});
});






留言
avatar-img
留言分享你的想法!
avatar-img
郭欣玫的沙龍
3會員
17內容數
郭欣玫的沙龍的其他內容
2024/07/24
主要來講宣告函式跟箭頭函式 : 宣告函式(Function Declaration) 語法: function functionName(parameters) { return result; } 特點: 使用 function 關鍵字 函式名稱是必需的 存在函式
2024/07/24
主要來講宣告函式跟箭頭函式 : 宣告函式(Function Declaration) 語法: function functionName(parameters) { return result; } 特點: 使用 function 關鍵字 函式名稱是必需的 存在函式
2024/07/14
就是指變數可以被訪問和使用的範圍,來說一下var、let和const的作用域差異。 var :function example() { console.log(x); // 輸出: undefined 因為變量提升造成的 var x = 5; } 函數作用域或全域作用域 可以重複宣告
2024/07/14
就是指變數可以被訪問和使用的範圍,來說一下var、let和const的作用域差異。 var :function example() { console.log(x); // 輸出: undefined 因為變量提升造成的 var x = 5; } 函數作用域或全域作用域 可以重複宣告
2024/07/04
一開始你先把你的專案push上去後,修改vite.config.ts ,要在裡面新增  base: "/Cart/" (/放自己的專案名稱/) build: {outDir: "docs"}, 接下來你要去你的github setting 裡面 -> Page ->選Deploy fro
Thumbnail
2024/07/04
一開始你先把你的專案push上去後,修改vite.config.ts ,要在裡面新增  base: "/Cart/" (/放自己的專案名稱/) build: {outDir: "docs"}, 接下來你要去你的github setting 裡面 -> Page ->選Deploy fro
Thumbnail
看更多
你可能也想看
Thumbnail
雙11於許多人而言,不只是單純的折扣狂歡,更是行事曆裡預定的,對美好生活的憧憬。 錢錢沒有不見,它變成了快樂,跟讓臥房、辦公桌、每天早晨的咖啡香升級的樣子! 這次格編突擊辦公室,也邀請 vocus「野格團」創作者分享掀開蝦皮購物車的簾幕,「加入購物車」的瞬間,藏著哪些靈感,或是對美好生活的想像?
Thumbnail
雙11於許多人而言,不只是單純的折扣狂歡,更是行事曆裡預定的,對美好生活的憧憬。 錢錢沒有不見,它變成了快樂,跟讓臥房、辦公桌、每天早晨的咖啡香升級的樣子! 這次格編突擊辦公室,也邀請 vocus「野格團」創作者分享掀開蝦皮購物車的簾幕,「加入購物車」的瞬間,藏著哪些靈感,或是對美好生活的想像?
Thumbnail
※ 什麼是Web API API 就是後端開出來讓前端來用的介面,讓前端與後端可以溝通。 API流程: 終端使用者用任何一種裝置進入瀏覽器。 瀏覽器透過 API 向後端發出請求,請求查詢或修改資料。 後端透過 API 收到前端的請求後,取得資料並回應給前端。 前端渲染畫面,終端使用者
Thumbnail
※ 什麼是Web API API 就是後端開出來讓前端來用的介面,讓前端與後端可以溝通。 API流程: 終端使用者用任何一種裝置進入瀏覽器。 瀏覽器透過 API 向後端發出請求,請求查詢或修改資料。 後端透過 API 收到前端的請求後,取得資料並回應給前端。 前端渲染畫面,終端使用者
Thumbnail
※ 原本狀態:伺服器渲染 這是 MVC 架構下的 request / response 示意圖,在這張圖呈現的架構裡,畫面和資料都由同一個架構處理。 伺服器渲染流程: 瀏覽器針對特定網址送出請求。 路由器解析請求後,轉接給對應的 controller。 controller 按照要求,透過
Thumbnail
※ 原本狀態:伺服器渲染 這是 MVC 架構下的 request / response 示意圖,在這張圖呈現的架構裡,畫面和資料都由同一個架構處理。 伺服器渲染流程: 瀏覽器針對特定網址送出請求。 路由器解析請求後,轉接給對應的 controller。 controller 按照要求,透過
Thumbnail
需求情境: 在設計畫面時,資料來源是後台的 api,每一次畫面細節的修修改改,都會觸發 Xcode Preview 程序,導致不斷呼叫後台。此時若資料結構和大小都具有一定規模,就會導致效率低落,不斷等待,且消耗伺服器資源甚鉅。 解決方案: 將後台傳回的資料以檔案形式暫存在本地端,每次 pr
Thumbnail
需求情境: 在設計畫面時,資料來源是後台的 api,每一次畫面細節的修修改改,都會觸發 Xcode Preview 程序,導致不斷呼叫後台。此時若資料結構和大小都具有一定規模,就會導致效率低落,不斷等待,且消耗伺服器資源甚鉅。 解決方案: 將後台傳回的資料以檔案形式暫存在本地端,每次 pr
Thumbnail
在API介接中使用x-www-form-urlencoded格式時,可能會遇到一些踩坑的情況,本文分享了作者在這方面遇到的問題和解決方法。
Thumbnail
在API介接中使用x-www-form-urlencoded格式時,可能會遇到一些踩坑的情況,本文分享了作者在這方面遇到的問題和解決方法。
Thumbnail
在開發前後端分離架構時,使用兩個不同網域所遇到跨域請求問題。特別是在POST請求時行為差異大,揭示了「簡單請求」與「預檢請求」的關鍵差異。簡單請求不需預檢,但application/json會觸發預檢請求,需透過特定設定解決。分享這篇文章希望幫助開發者有效處理跨域問題。
Thumbnail
在開發前後端分離架構時,使用兩個不同網域所遇到跨域請求問題。特別是在POST請求時行為差異大,揭示了「簡單請求」與「預檢請求」的關鍵差異。簡單請求不需預檢,但application/json會觸發預檢請求,需透過特定設定解決。分享這篇文章希望幫助開發者有效處理跨域問題。
Thumbnail
先前幾篇筆記介紹了網路請求,瀏覽器儲存資料的方式,那麼實務上,前端最常需要發送網路請求的時候,就是透過呼叫 API,去向後端工程師發送/請求資料,所以今天來記錄什麼是 API吧!
Thumbnail
先前幾篇筆記介紹了網路請求,瀏覽器儲存資料的方式,那麼實務上,前端最常需要發送網路請求的時候,就是透過呼叫 API,去向後端工程師發送/請求資料,所以今天來記錄什麼是 API吧!
Thumbnail
Request內容 package main import ( "fmt" "log" "net/http" "strings" ) func request(w http.ResponseWriter, r *http.Request) { //這些資訊是輸出到伺服器端的列印訊息
Thumbnail
Request內容 package main import ( "fmt" "log" "net/http" "strings" ) func request(w http.ResponseWriter, r *http.Request) { //這些資訊是輸出到伺服器端的列印訊息
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News