---
# System prepended metadata

title: 第六堂：AJAX 操控伺服器之術
tags: [JS 直播班 - 2024 秋季班]

---

# 第六堂：AJAX 操控伺服器之術
## 開課提醒
1. 錄影
2. [第五週週報](https://liberating-turtle-5a2.notion.site/EP5-ba7ae94f28824c21985aa86a13a85d65?pvs=4)
3. 中場休息介紹：[最終關卡任務](https://rpg.hexschool.com/#/training/12062289980171095264/board/content/12062289980171095265_12062289980171095286?tid=12062289980171193312)
    * 此關卡資訊是先讓同學們可以瞭解最終作業範圍並提前準備
    * 第八~九週的週五課程，將會詳細講解關卡資訊
    * 可先觀看洧杰老師的 Live Demo
        * [上午場](https://courses.hexschool.com/courses/2020111311/lectures/48764792)
        * [下午場](https://courses.hexschool.com/courses/2020111311/lectures/48764793)
        * [晚上場](https://courses.hexschool.com/courses/2020111311/lectures/48764794)
   

## 今日上課知識點
1. AJAX
2. 非同步
3. axios
---
## 為什麼要學 [AJAX](https://zh.wikipedia.org/zh-tw/AJAX)?
1. 客戶端(Client)與伺服器(Server)做資料交換
    * 客戶端與伺服器做資料交換的過程
    * 資料交換的方法
- client(客戶端)通常是指瀏覽器、應用程式
- server(伺服器)是用來處理和回應客戶端（如瀏覽器、應用程式）請求的電腦或程式
- database(資料庫)是存資料的資料庫
## 客戶端與伺服器做資料交換的過程 - 網路請求
1. 圖解發出請求的流程，以「進入 Google 頁面為例
2. 用本地端電腦來講解 Chrome Network，並加入 all.js 與圖片
> 以「六角學院網站」看網路請求
## 資料交換的方法 - AJAX 
任何與伺服器透過 JS **非同步**交換資料的方式都可以叫做 AJAX
Asynchronous JavaScript And XML
1. [XMLHttpRequest JS 學徒免費觀看](https://courses.hexschool.com/courses/670042/lectures/11952549)、[介紹](https://developer.mozilla.org/zh-TW/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest)
2. [Fetch](https://developer.mozilla.org/zh-TW/docs/Web/API/Fetch_API/Using_Fetch#%E4%BD%BF%E7%94%A8_fetch_%E7%99%BC%E9%80%81%E8%AB%8B%E6%B1%82_request)
3. [axios 套件](https://github.com/axios/axios)，web 操作底層是 XMLHttpRequest，[get 範例](https://github.com/axios/axios#example)

## 非同步
同步 → 同一個步道
![截圖 2024-11-01 下午6.41.26](https://hackmd.io/_uploads/BkWPg4GWke.png)


非同步 → 不同步道
![截圖 2024-11-01 下午6.41.36](https://hackmd.io/_uploads/H10vlEf-1g.png)

> 優點：不會互相卡住
> 缺點：有時候會無法預期誰先結束

## axios
* [axios 套件](https://github.com/axios/axios)
* [環境安裝 CDN](https://github.com/axios/axios#cdn)

GET 練習：
* [練習用的 JSON 連結](https://hexschool.github.io/ajaxHomework/data.json)
* [get 語法](https://github.com/axios/axios#response-schema)


非同步觀念題：
* [練習1](https://codepen.io/hexschool/pen/yLZbpwR?editors=0010)
* [練習2](https://codepen.io/hexschool/pen/NWojXmy?editors=0011)
* [練習3](https://codepen.io/hexschool/pen/vYbmpwy?editors=0010)
* [練習4](https://codepen.io/hexschool/pen/OJdmQRQ?editors=0011)
* [練習5](https://codepen.io/hexschool/pen/xxRoWzB?editors=1010)
-> 要將拿到 data之後要做的事情包在 then 裡面
-> 可以包成 function，提升閱讀性

<!--
小試身手
https://ptx.transportdata.tw/MOTC/v2/Tourism/ScenicSpot?$top=30&$format=JSON
  <ul>
  <li>景點名稱一</li>
    <li>景點名稱二</li>
</ul>


-->
<!-- 
> 如何觀看該 API 是否提供介接，可使用 [test-cors](https://www.test-cors.org/)
> 不行清單：[里長](https://cabu4.kcg.gov.tw/KcgRegion/OpenData/%E9%87%8C%E9%95%B7%E9%80%9A%E8%A8%8A%E9%8C%84.JSON)、[台南公有停車場](https://data.tainan.gov.tw/dataset/public_free_parking/resource/27234516-7820-4d86-8877-579151b2ce9c)
> 可以清單：[BMI kata](https://raw.githubusercontent.com/hexschool/js-traninging-week6API/main/data.json)、[全國交通運輸](https://ptx.transportdata.tw/MOTC?t=Tourism&v=2#!/Tourism/TourismApi_ScenicSpot)、[十分鐘雨量(用 open api)](https://opendata.epa.gov.tw/Data/Contents/ATM00634/)、[PM2.5](https://opendata.epa.gov.tw/Data/Contents/ATM00766/) -->

**補充：網路請求種類**

[MDN HTTP 請求種類](https://developer.mozilla.org/zh-TW/docs/Web/HTTP/Methods)
常用的如下，axios 皆有[支援](https://github.com/axios/axios#request-method-aliases)，本堂先專注 get 的方法
* get
* post
* delete
* put
* patch


## Live Demo(AJAX+ForEach+innerHTML)
* [高雄私立幼稚園](https://data.kcg.gov.tw/dataset/kaohsiung-private-baby-care-center)
---

## 本週任務
1. 主線任務

* [範例程式碼](https://codepen.io/hexschool/pen/zYobJgp?editors=1010)

3. 小組任務
4. 週末任務
    串接此 [BMI Kata 資料集](https://raw.githubusercontent.com/hexschool/js-traninging-week6API/main/data.json)，出一個題目來接龍