擋住錯誤資料
姓名空白或 Email 不合法時,顯示原因且不送出。
CHAPTER 23 · 180 MINUTES
表單像寄件櫃台:先驗收內容、整理 payload、送出一次,最後把成功或失敗清楚交代。
LEARNING GOALS
姓名空白或 Email 不合法時,顯示原因且不送出。
送出前能預覽固定欄位的 JSON,不直接丟整個表單。
送出期間停用按鈕,成功或失敗後都恢復可操作。
PROBLEM & ANALOGY
第 22 章都在讀取資料;本章第一次接住使用者輸入。validation 像櫃台驗件、payload 像寄件單、POST 像交寄、loading 像處理中號碼牌。
本章要解決:錯誤內容不能送出,連點不能製造重複請求,失敗後介面也不能鎖死。
合回共同作品:聯絡表單會成為作品集能被別人實際操作的入口。
SCOPE
validation、payload、POST、loading/success/error 與 finally 收尾。
HTTP method、request body 與 content type 是送出契約的一部分。
檔案上傳、OAuth、正式防垃圾機制與敏感個資收集。
CORE IDEAS
preventDefault(),讀取欄位後執行 validate;不合法就停止。createPayload() 只建立允許送出的固定欄位,預覽後才 POST。DEBUGGING
課堂刻意錯誤:連點造成重複送出,或只在 success 恢復按鈕,讓 error 後介面永久鎖死。
先查:確認 preventDefault、validate 與請求呼叫順序。
先查:對照 payload 預覽與允許欄位,不送整個表單物件。
先查:確認 finally 在 success 與 error 後恢復提交狀態。
PRACTICE CONTRACT
檔案:script.js
位置:validate()
結果:空白或不合法 Email 不會送出
檔案:script.js
位置:createPayload()
結果:預覽區顯示即將送出的 JSON
檔案:script.js
位置:mockSubmit()、handleSubmit()
結果:成功與失敗都可重現,送出期間按鈕停用且完成後恢復
EVIDENCE
送出先由 ______ 驗證;payload 只有 ______;失敗後由 ______ 恢復 ______。
使用 mockSubmit 時要清楚寫「模擬」;不要把 mock 寫入說成正式後端資料。
展示空白、錯誤 Email、成功與模擬失敗四條路線;附一次 payload 預覽,以及送出期間按鈕停用的畫面。
下一章:從一次 POST 改成持續訂閱即時資料。