EP 02 | Asynchronous JS 的運用 - HTTP Requests

更新 發佈閱讀 6 分鐘

先來了解一下一個專有名詞 「AJAX」(非同步 JavaScript 及 XML,Asynchronous JavaScript and XML),這個名詞主要用來描述利用 JS 中數個方法來向伺服器取得資料,且不需要更新畫面即可及時取得最新內容,而這一篇主要是介紹如何使用 XMLHttpRequest 來發出請求及接收回應的。

raw-image

發出 HTTP 請求

透過創建(new)一個 XMLHttpRequest 物件,之後透過該物件中的 open(method, url, async) 及 send() 來確實發出請求。

//創建 XMLHttpRequest() 物件

const httpRequest = new XMLHttpRequest()



// 初始化一個請求

// 決定以何方法來透過API跟伺服器聯絡

httpRequest.open('GET','https://jsonplaceholder.typicode.com/todos/1',true)

//確實以 open() 要求來傳送請求

httpRequest.send()

open() 使用說明

httpRequest.open(method, url, async)
  • method :可使用 GETPOSTPUTDELETE HEAD 來處理資料。
  • url : 欲請求頁面的 URL ,須小心有跨來源資源共用(CORS)的問題。
  • async : 是否為非同步,非同步為 true (默認值),同步為 false 。

接收 HTTP 請求

在發出請求後,經過一段時間會得到回傳的資料,這時候透過開發者工具即可看到資料回傳狀況及接收到的資料內容。


我們可以將處理資料的方法分為 2 個步驟:

監聽資料回傳狀況

監聽 XMLHttpRequest 物件中的 readyState 屬性變化來看資料是否已經回傳,而 readyState 屬性總共有幾個值分別代表不同意思,請參考下圖(擷取自 MDN)

在透過 XMLHttpRequest 發出請求後,有下列幾種方法可以用來監聽資料回傳進展狀況。

監聽 XMLHttpRequest 物件中的 readyState 。

須先了解 readyState 不同值的意義。

raw-image


httpRequest.addEventListener('readystatechange',()=>{

console.log(httpRequest,httpRequest.readyState)

//httpRequest.readyState === 4 代表資料已回傳完畢

if(httpRequest.readyState === 4){

//回傳的資料內容

console.log(httpRequest.responseText)

}

})



/*

httpRequest.onreadystatechange = ()=>{

console.log(httpRequest,httpRequest.readyState)

//httpRequest.readyState === 4 代表資料已回傳完畢

if(httpRequest.readyState === 4){

//回傳的資料內容

console.log(httpRequest.responseText)

}

}

*/
  • 監聽 load 事件,httpRequest 的 load 事件等於 httpRequest.readyState === 4
httpRequest.addEventListener('load',()=>{

console.log(httpRequest,httpRequest.readyState) // 4

//回傳的資料內容

console.log(httpRequest.responseText)

})



/*

httpRequest.onload = ()=>{

console.log(httpRequest,httpRequest.readyState) // 4

//回傳的資料內容

console.log(httpRequest.responseText)

}

*/

接收到的資料狀態

當透過 httpRequest.readyState 確定資料已經回傳完畢後,這時候還得透過 httpRequest.status來確認伺服器回傳回來的資料狀態是否正確。

httpRequest.status 也有幾種不同值,而每個值分別代表不同意思,詳細可參考HTTP 狀態碼

raw-image


httpRequest.addEventListener('load',()=>{

console.log(httpRequest,httpRequest.readyState) // 4

if(httpRequest.status === 200){

//回傳的資料內容

console.log(httpRequest.responseText)

}else{

//回傳的資料出了錯誤

//處理錯誤

}

})

參考資料

NDN - AJAX 入門篇

NDN - 使用 XMLHttpRequest

NDN - Synchronous and asynchronous requests

NDN - XMLHttpRequest.readyState



留言
avatar-img
鍋灶的熱湯
0會員
10內容數
分享生活、旅行經驗,經驗是種解決問題的方式,方式不只一種歡迎大家一起分享經驗
你可能也想看
Thumbnail
賽勒布倫尼科夫以流亡處境回望蘇聯電影導演帕拉贊諾夫的舞台作品,以十段寓言式殘篇,重新拼貼記憶、暴力與美學,並將審查、政治犯、戰爭陰影與「形式即政治」的劇場傳統推到台前。本文聚焦於《傳奇:帕拉贊諾夫的十段殘篇》的舞台美術、音樂與多重扮演策略,嘗試解析極權底下不可言說之事,將如何成為可被觀看的公共發聲。
Thumbnail
賽勒布倫尼科夫以流亡處境回望蘇聯電影導演帕拉贊諾夫的舞台作品,以十段寓言式殘篇,重新拼貼記憶、暴力與美學,並將審查、政治犯、戰爭陰影與「形式即政治」的劇場傳統推到台前。本文聚焦於《傳奇:帕拉贊諾夫的十段殘篇》的舞台美術、音樂與多重扮演策略,嘗試解析極權底下不可言說之事,將如何成為可被觀看的公共發聲。
Thumbnail
柏林劇團在 2026 北藝嚴選,再次帶來由布萊希特改編的經典劇目《三便士歌劇》(The Threepenny Opera),導演巴里・柯斯基以舞台結構與舞台調度,重新向「疏離」進行提問。本文將從觀眾慾望作為戲劇內核,藉由沉浸與疏離的辯證,解析此作如何再次照見觀眾自身的位置。
Thumbnail
柏林劇團在 2026 北藝嚴選,再次帶來由布萊希特改編的經典劇目《三便士歌劇》(The Threepenny Opera),導演巴里・柯斯基以舞台結構與舞台調度,重新向「疏離」進行提問。本文將從觀眾慾望作為戲劇內核,藉由沉浸與疏離的辯證,解析此作如何再次照見觀眾自身的位置。
Thumbnail
本文深入解析臺灣劇團「晃晃跨幅町」對易卜生經典劇作《海妲.蓋柏樂》的詮釋,從劇本歷史、聲響與舞臺設計,到演員的主體創作方法,探討此版本如何讓經典劇作在當代劇場語境下煥發新生,滿足現代觀眾的觀看慾望。
Thumbnail
本文深入解析臺灣劇團「晃晃跨幅町」對易卜生經典劇作《海妲.蓋柏樂》的詮釋,從劇本歷史、聲響與舞臺設計,到演員的主體創作方法,探討此版本如何讓經典劇作在當代劇場語境下煥發新生,滿足現代觀眾的觀看慾望。
Thumbnail
《轉轉生》為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,融合舞蹈、音樂、時尚和視覺藝術,透過身體、服裝與群舞結構,回應殖民歷史、城市經驗與祖靈記憶的交錯。本文將從服裝設計、身體語彙與「輪迴」的「誕生—死亡—重生」結構出發,分析《轉轉生》如何以當代目光,形塑去殖民視角的奈及利亞歷史。
Thumbnail
《轉轉生》為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,融合舞蹈、音樂、時尚和視覺藝術,透過身體、服裝與群舞結構,回應殖民歷史、城市經驗與祖靈記憶的交錯。本文將從服裝設計、身體語彙與「輪迴」的「誕生—死亡—重生」結構出發,分析《轉轉生》如何以當代目光,形塑去殖民視角的奈及利亞歷史。
Thumbnail
Double girder gantry cranes are widely used in heavy industries, manufacturing plants, shipyards, and logistics hubs, thanks to their high lifting cap
Thumbnail
Double girder gantry cranes are widely used in heavy industries, manufacturing plants, shipyards, and logistics hubs, thanks to their high lifting cap
Thumbnail
正當馬克斯在股票分析領域嶄露頭角時,銀行一紙調令將他送到"冷門"的債券部門。當時的高收益債券被視為垃圾,受託人避之唯恐不及,幾乎無人研究。但在這個被遺忘的角落,馬克斯發現了金礦:穩定安全地賺錢。這個職涯的意外轉折讓他領悟投資的第一個黃金法則:最好的機會往往在最不受歡迎的地方。
Thumbnail
正當馬克斯在股票分析領域嶄露頭角時,銀行一紙調令將他送到"冷門"的債券部門。當時的高收益債券被視為垃圾,受託人避之唯恐不及,幾乎無人研究。但在這個被遺忘的角落,馬克斯發現了金礦:穩定安全地賺錢。這個職涯的意外轉折讓他領悟投資的第一個黃金法則:最好的機會往往在最不受歡迎的地方。
Thumbnail
sync rst 和 async rst reg 在rtl上只有差在always block的condition不同,但是在合成上卻是兩種不同type的register,有著不同的優缺 sync reset reg : always @ (postedge clk) begin if (!rs
Thumbnail
sync rst 和 async rst reg 在rtl上只有差在always block的condition不同,但是在合成上卻是兩種不同type的register,有著不同的優缺 sync reset reg : always @ (postedge clk) begin if (!rs
Thumbnail
在這步調飛快的世代,慢慢地放緩自己行走的節奏。專注於自己的成長,放慢腳步,擴寬眼界與心界,過上舒心慢悠的生活。
Thumbnail
在這步調飛快的世代,慢慢地放緩自己行走的節奏。專注於自己的成長,放慢腳步,擴寬眼界與心界,過上舒心慢悠的生活。
Thumbnail
非同步程式設計(Asynchronous programming) 或是簡單的稱之為 async,它是一種並發程式模型(concurrent programming model),其目的就是讓多個任務能同時在作業系統的執行緒上執行,並透過 async/.await 保留同步。
Thumbnail
非同步程式設計(Asynchronous programming) 或是簡單的稱之為 async,它是一種並發程式模型(concurrent programming model),其目的就是讓多個任務能同時在作業系統的執行緒上執行,並透過 async/.await 保留同步。
Thumbnail
這陣子培養了一個新習慣,就是比平常早20分鐘起床,然後出門前半小時就是屬於我的晨讀時光。這個習慣已經持續一個月以上了~覺得自己很棒、很不容易!畢竟以往的我都是睡到最後一刻才起床,什麼叫做晨讀?過往人生字典中沒有這回事哈哈哈。
Thumbnail
這陣子培養了一個新習慣,就是比平常早20分鐘起床,然後出門前半小時就是屬於我的晨讀時光。這個習慣已經持續一個月以上了~覺得自己很棒、很不容易!畢竟以往的我都是睡到最後一刻才起床,什麼叫做晨讀?過往人生字典中沒有這回事哈哈哈。
Thumbnail
為了證明自己的價值而努力,但不再期待任何人的誇獎 - -By 老楊的貓頭鷹 《不要在該奮鬥時選擇安逸》 每次的努力 總是希望有人看見 總是希望獲得他人的讚美與認同 我們才會覺得自己的存在有價值 曾幾何時 我們竟然忘了 那些努力,應該要是為了自己的成長 自我價值,應該要是由自己給予
Thumbnail
為了證明自己的價值而努力,但不再期待任何人的誇獎 - -By 老楊的貓頭鷹 《不要在該奮鬥時選擇安逸》 每次的努力 總是希望有人看見 總是希望獲得他人的讚美與認同 我們才會覺得自己的存在有價值 曾幾何時 我們竟然忘了 那些努力,應該要是為了自己的成長 自我價值,應該要是由自己給予
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News