JQuery Ajax 、 Fetch 、 Axios API 介紹
JQueryAjax
早期JQuery盛行時使用的方式,現已漸漸為其他技術取代
為 jQuery 下的 AJAX 操作。$.ajax() 返回其創建的 XMLHttpRequest 對象。
使用範例:
1 | var list = {}; |
缺點為:
- 須引入JQuery,但JQuery整個專案太大,單純使用ajax卻要引入整個JQuery非常的不合理。
- 以及容易受到惡意代碼攻擊(CSRF攻擊、XSS攻擊)。什麼是CSRF攻擊及XSS攻擊,請參考ajax、axios、fetch之間優缺點重點對比-CSRF攻擊、XSS攻擊
Fetch
Fetch號稱是AJAX的替代品,是在ES6出現的,使用了ES6中的Promise對象。Fetch是基於promise設計的。Fetch的代碼結構比起ajax簡單多了,參數有點像jQuery ajax。但是,一定記住fetch不是ajax的進一步封裝,而是原生js。Fetch函數就是原生js,沒有使用XMLHttpRequest對象。-ajax、axios、fetch之間優缺點重點對比
fetch()是一個全域的方法,包含了需要 fetch 的網址和對應的屬性設定 ( 例如 method、headers、mode、body…等,最基本的寫法屬性不一定要填 ),執行之後會送出 Request,如果得到回應就會回傳帶有 Response 的 Promise 物件,使用 then 將回傳值傳遞下去。
:::warning
使用方式部分注意!還要再補充一些幫助自己了解[color=#ff0000]
基本用法:
1 | fetch('網址') |
舉例來說,前往 中央氣象局開放資料平台可以取得許多氣象資料,下面的範例使用 局屬氣象站-現在天氣觀測報告,複製 JSON 格式的連結 ( 需要註冊登入才能看得到連結 ),因為檔案為 json 格式,所以在 fetch 取得檔案之後,透過json()的方法處理檔案,接著傳遞到下一層,就能顯示出「高雄市的即時氣溫」。-JavaScript Fetch API 使用教學
1 | fetch('局屬氣象站-現在天氣觀測報告網址') |
Fetch 的 Request 屬性
Fetch 的 Response 屬性
Fetch 的 Response 方法
Fetch 的 Get 用法
Get 是 Fetch 最簡單的方法,使用 Get 必須要將 fetch 第二個參數裡的 method 設定為 get,
1 | const name = 'oxxo'; |
Fetch 的 Post 用法
1 | const uri = 'https://script.google.com/macros/s/AKfycbxXH6aPsldTBeS41WRMnJEA5Xstc7cYMj6YimDO2Al7H6DkJZiz/exec'; |
Fetch 搭配 async、await、promise.all
1 | const postURL = (name,age) => { |
:::
優點:
- 語法簡潔,更加語義化
- 基於標準 Promise 實現,支持 async/await
- 同構方便,使用 isomorphic-fetch
- 更加底層,提供的API豐富(request, response)
- 脫離了XHR,是ES規範裡新的實現方式
缺點:
- fetchtch只對網路請求報錯,對400,500都當做成功的請求,需要封裝去處理
- fetch預設不會帶cookie,需要新增配置項
- fetch不支援abort,不支援超時控制,使用setTimeout及Promise.reject的實現的超時控制並不能阻止請求過程繼續在後臺執行,造成了量的浪費
- fetch沒有辦法原生監測請求的進度,而XHR可以
Axios
axios不是原生JS的,需要進行安裝,它不但可以在客戶端使用,也可以在nodejs端使用。Axios也可以在請求和響應階段進行攔截。同樣也是基於Promise對象的。特性:從瀏覽器中創建 XMLHttpRequests、從 node.js 創建 http 請求、支持 Promise API、攔截請求和響應等。
執行 GET 請求
1 | // 為給定 ID 的 user 創建請求 |
執行 POST 請求
1 | axios.post('/user', { |
執行多個併發請求
1 | function getUserAccount() { |
Axios既提供了併發的封裝,體積也較小,也沒有下文會提到的fetch的各種問題,當之無愧是現在最應該選用的請求的方式。
優缺點:
從 node.js 建立 http 請求
支援 Promise API
客戶端支援防止CSRF
提供了一些併發請求的介面(重要,方便了很多的操作)
參考資料:
ajax、axios、fetch之間的區別以及優缺點
:::warning
這裡在進一步參考
只需要知道現在無腦使用axios即可,Jquery老邁笨拙,fetch年輕稚嫩,只有Axios正當其年!