這次練習透過傳統表單的格式加上 AJAX 傳遞資料到後端,完成一個註冊與登入頁。
會使用到:
- form 表單格式。
- input 屬性。
- AJAX 串接。
- 註冊與登入功能。
- 帳號驗證。
先在畫面寫出一個表單。
HTML 架構
1 | <div class="wrap"> |
因為會用監聽功能,所以按鈕就不用 submit
,而是使用 button
,在要監聽的 input
加入 class
。
JavaScript 行為
分析:
要使用的地方是輸入input
後,透過點擊button
後,才會產生事件,所以要綁定的是button
的class
。( click 事件)
1 | var signUpBtn = document.querySelector(".signUp"); |
綁定後,對這兩個按鈕新增 click 事件。
1 | signUpBtn.addEventListener("click", signUpcheck, false); |
因為兩者的功能相似,紀錄其中一個為代表,有差的地方是 API 不同,還有 API 中的 message
資訊不同。
建立 signUpcheck
監聽事件:
1 | function signUpcheck() { |
因為這個監聽是要輸入帳號、密碼之後,所得到的值,所以選到 email
跟 password
的值,假設今天後端需要 JSON 格式的資料,所以就新的宣告的變數 account
為一個物件,用這個物件帶入前台輸入的資料。
前提是要看後端所需要的內容而定,並非都是 JSON 的格式,但有些後端會說給他 JSON 就好。
1 | var emailStr = document.querySelector(".email").value; |
串接 AJAX
資料建立好後,就可以串接 AJAX,因為是要把輸入的值丟給後端,告訴後端 xhr.setRequestHeader
的格式是 JSON
,因為前後端接收的都是字串,JSON 格式是物件,所以要透過 stringify
轉成字串。完成後就可以把這個 data
送出到後端。
1 | var xhr = new XMLHttpRequest(); |
onload
再透過 onload
把想要行為寫在裡面。剛剛提到前後端所要的資料格式為字串,所以要給後端的時候,但因為要比對字串的內容,而比對的資料是 JSON ,所以回傳的資料要用 parse
,並命名一個變數,代表物件回傳的 message
,並做判斷,如果符合 message
中的內容,就跳出「帳號註冊成功」,其他結果則跳出「帳號已被使用」。
1 | xhr.onload = function () { |
完整內容於 Codepen https://codepen.io/hnzxewqw/pen/NWqXrEe
心得
先分析目前所有的內容是資料(Model)、事件(event)、視覺(view)。比較可以釐清目前程式碼的邏輯與撰寫,比較知道遇到 Bug 的時候卡關在哪裡。
前後端收到的都是字串,而是在比對的資料為 JSON,所以這邊的資料轉型觀念就很重要,不過現在有很多套件可以使用,但觀念具備很重要!