請啟用 Javascript 查看內容

JS 學徒特訓班 - AJAX 47 ~ 50 關

 ·  ☕ 3 分鐘

竹白的 JS 學徒特訓班筆記 - 目錄

記錄六角學院所開的 JS 學徒特訓班,為期 60天的特訓。

第四十七關 -

題目連結

47. 問題

請吸收以下影片列表,以了解 post 的練習,影片內容是使用原生 post 方式,如果您已理解觀念,還請觀看 axios 影片來改寫原生 post 語法,用我們所提供的 API,來註冊一個帳號

老鳥問題:

請用此 API,寫三個 AJAX POST API 範例:

  • XMLHttpRequest
  • Fetch
  • axios

47. 參考解答

API、要 POST 的資料(JSON 格式):

1
2
3
4
5
const url = 'https://hexschool-tutorial.herokuapp.com/api/signin';
const sendData = {
  email: 'lovef2e@hexschool.com',
  password: '12345678',
};

XHR:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
const xhr = new XMLHttpRequest();
xhr.open('POST', url);
xhr.setRequestHeader('content-type', 'application/json');
xhr.send(JSON.stringify(sendData));

xhr.addEventListener('load', function () {
  if (this.status === 200) {
    const data = JSON.parse(this.responseText);
    alert(data.success + ',' + data.message);
  }
});

Fetch:

1
2
3
4
5
6
7
8
9
fetch(url, {
  method: 'POST',
  headers: { 'content-type': 'application/json' },
  body: JSON.stringify(sendData),
})
  .then((response) => response.json())
  .then((data) => {
    alert(data.success + ',' + data.message);
  });
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
// Async/Await
async function ajax() {
  const response = await fetch(url, {
    method: 'POST',
    headers: { 'content-type': 'application/json' },
    body: JSON.stringify(sendData),
  });

  const data = await response.json();
  alert(data.success + ',' + data.message);
}

ajax();

jQuery ajax:

1
2
3
$.post(url, sendData, function (data) {
  alert(data.success + ',' + data.message);
});

axios:

1
2
3
4
axios.post(url, sendData).then((response) => {
  const data = response.data;
  alert(data.success + ',' + data.message);
});

教學、延伸知識連結

第四十八關 -

題目連結

48. 問題

請做此此影片的小節作業,一個網頁上有兩個面板,分別是

  • 註冊面板
  • 登入面板

同時寫一些驗證與使用者體驗功能,例如:

  1. 帳號密碼不可為空
  2. 送出後,欄位進行清空
  3. 查詢是否為 Email 格式(非必做)
  4. 密碼是否有英數夾雜(非必做)

48. 參考解答

codePen

第四十九、五十關 - 旅館訂房網

題目連結

技術主管終於告訴小杰,他們準備要幫客戶做旅館訂房網的題目,客戶已經有在網站看到一些網站覺得不錯,

後來技術主管發現,其實那些網站都是 fake API,查到源頭才發現是這個網站,所以客戶要求說,先用這網站所提供的 API 先做出雛形來。

49.50. 問題

小杰依照文件裡的 API,想要去取得此 API [GET] 取得所有房型,但發現不管怎麼戳也無法取得所有房型資料,

技術主管只淡淡說了一句:「你送請求時少加 TOKEN 啦!」,就跑去泡咖啡了,這句話究竟是什麼意思呢?

  • 任務一:請已經了解這知識的學員,寫篇 hackMD,教導該如何夾帶 token,
  • 任務二:請用 codepen 寫自己的範例,能正確取得 [GET] 取得所有房型,並用 ul、li 來呈現各個「房型名稱

49. 參考解答

TOKEN 簡單來說,就是你登入帳密(POST)後,伺服器會給你通行證(token),當你要跟伺服器請求資料時(GET),就是用這組通行證來驗證,不需要再次傳送帳號。

API、TOKEN:

1
2
const url = 'https://challenge.thef2e.com/api/thef2e2019/stage6/rooms';
const token = '';

XHR:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
const xhr = new XMLHttpRequest();
xhr.open('GET', url);
xhr.setRequestHeader('Authorization', `Bearer ${token}`);
xhr.send(null);

xhr.addEventListener('load', function () {
  if (this.status === 200) {
    const data = JSON.parse(this.responseText);
    console.log(data);
  }
});

Fetch:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
fetch(url, {
  method: 'GET',
  headers: {
    Authorization: `Bearer ${token}`,
  },
})
  .then((res) => res.json())
  .then((data) => {
    console.log(data);
  });

jQuery ajax:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
$.ajax({
  url,
  type: 'GET',
  headers: {
    Authorization: `Bearer ${token}`,
  },
  success(data) {
    console.log(data);
  },
});

axios:

1
2
3
4
5
6
7
axios
  .get(url, {
    headers: { Authorization: `Bearer ${token}` },
  })
  .then((res) => {
    console.log(res.data);
  });

50. 參考解答

渲染:

1
2
3
4
5
6
7
8
9
function render(data) {
  const list = document.querySelector('.list');
  
  data.items.forEach((item)=> {
    const li = document.createElement('li');
    list.append(li);
    li.textContent = `Room name: ${item.name}`;
  });
}

教學、延伸知識連結


竹白
作者
竹白
前端筆記

文章目錄