STEP GUIDE · Solution

這個步驟要做什麼、改哪裡、怎麼看結果

這一步聚焦 TASK-03;下方只比較「Checkpoint 2 → Solution」的真實異動。

01

三項 Task 進度

TASK-01已完成

驗證姓名與 Email

預計修改:script.js

完成後:空白或不合法 Email 不會送出

TASK-02已完成

建立明確 POST payload

預計修改:script.js

完成後:預覽區顯示即將送出的 JSON

TASK-03本步驟處理

送出並管理 loading/success/error

預計修改:script.js

完成後:成功與失敗都可重現,送出期間按鈕停用且完成後恢復

02

HTML、CSS、JavaScript 與文件實際異動

展開檔案卡查看必要差異;只有程式碼區可以橫向捲動。

HTML本步驟無異動

檔案:index.html

修改前

前一步與本步驟沒有實質差異。

修改後

本步驟不需修改此語言。
CSS本步驟無異動

檔案:style.css

修改前

前一步與本步驟沒有實質差異。

修改後

本步驟不需修改此語言。
JavaScript本步驟有異動

檔案:script.js

修改前

async function handleSubmit(event){event.preventDefault();const payload=createPayload();const error=validate(payload);preview.textContent=JSON.stringify(payload,null,2);status.textContent=error||"尚未完成送出流程"}

修改後

async function handleSubmit(event){event.preventDefault();const payload=createPayload();const error=validate(payload);preview.textContent=JSON.stringify(payload,null,2);status.className="";if(error){status.textContent=error;status.className="error";return}submit.disabled=true;status.textContent="送出中…";try{const result=await mockSubmit(payload,simulateFailure.checked);if(!result.ok)throw new Error("伺服器拒絕");status.textContent=`送出成功,編號 ${result.id}`}catch(requestError){status.textContent=`送出失敗:${requestError.message}`;status.className="error"}finally{submit.disabled=false}}
README/其他文件本練習未使用

檔案:README.md

修改前

本練習沒有這個檔案。

修改後

本步驟不需修改此語言。
03

怎麼看到結果

  1. 準備

    先保持表單空白並開啟 DevTools Console;Solution 再觀察送出期間的按鈕與狀態文字。

  2. 操作

    填入有效資料送出,確認送出中、成功編號與按鈕恢復;勾選「模擬伺服器失敗」再送出,確認錯誤訊息、輸入保留與按鈕恢復。

  3. 預期

    成功與失敗都可重現,送出期間按鈕停用且完成後恢復

Solution TASK-03

送出並管理 loading/success/error

完成後可見:成功與失敗都可重現,送出期間按鈕停用且完成後恢復

MOCK POST

聯絡我

尚未建立 payload