返回任務地圖

請求進行中,不要送第二次

第 18 堂 · 第 2/3 關 · 觀念 18 分鐘+實作 42 分鐘

查看本堂完整六步
先接任務,準備開始

請求進行中,不要送第二次,每一步都有依據。

pending避免連點;AbortController停止等待不代表後端一定沒保存。422、503與斷回應需不同提示。

這關帶走:連點不產第二請求,錯誤後恢復適當操作。

步驟 3/6 · 觀念 18 分鐘

先學一招:明確失敗與結果不明要分開

連點不產第二請求,錯誤後恢復適當操作。

帶上你的裝備

  • 自己的service-site/frontend/inquiry.html、inquiry.js、config.js與完整styles.css
  • 隨起始包提供的API_CONTRACT.html、START_HERE.html與實際Network紀錄;不附管理密碼
  • 正常與422/503/disconnect的實際回應,pending前後操作表

pending避免連點;AbortController停止等待不代表後端一定沒保存。422、503與斷回應需不同提示。

一起拆解:逾時不等於沒有保存

本關18分鐘觀念:3分鐘看輸入、6分鐘逐步推演、5分鐘正常與錯誤對照、4分鐘先預測再說明。

這次的輸入

inquiry=slow在保存後等9秒;本前端8秒逾時。

0秒:送出且pending=true
後端:保存案件
8秒:前端逾時 → 結果未確認
9秒:原回應可能已無法接收

這段是觀念縮圖,完整可操作檔案在本關參考成果;請依當前階段判讀,不把片段直接貼到任意位置。

一步一步推演

  1. 先測連點只發一次,並保留五欄。
  2. 切slow或disconnect,將結果標未確認,不自動重送;503 save_failed另標尚未保存。
  3. 用受控工具依主旨找同id,恢復normal再決定是否手動重試。

正常應看到

不把網路結果不明誤報失敗或成功;資料與案件都可追查。

常見錯誤對照

逾時後自動換新key再送,可能產生重複詢問。

先預測,再說明原因

422、503尚未保存、逾時三種情況,哪一種必須先查同案?

跟著觀察

  1. 先讀「逾時不等於沒有保存」的輸入,指出本關實際檔案或資料。
  2. 422、503尚未保存、逾時三種情況,哪一種必須先查同案?
  3. 依例子逐步說明正常結果與錯誤差別,再記下自己的預測;參考結果不是已完成的實測。
逾時代表後端一定沒保存嗎?

選一個試試看,答錯也可以再試。

這是你的實際操作確認,小測不會替你勾選。

步驟 4/6 · 實作 42 分鐘

動手挑戰:請求進行中,不要送第二次

連點不產第二請求,錯誤後恢復適當操作。

先準備

  • 自己的service-site/frontend/inquiry.html、inquiry.js、config.js與完整styles.css
  • 隨起始包提供的API_CONTRACT.html、START_HERE.html與實際Network紀錄;不附管理密碼
  • 正常與422/503/disconnect的實際回應,pending前後操作表

親手記下連點、422、503與結果不明四種預期,再實際測。

照這個順序開始

  1. 保持已有POST,只列出要補的防連點與錯誤狀態。
  2. 請AI加pending、8秒逾時與欄位錯誤對應,不改契約。
  3. 測已填值保留、一次請求、斷回應後不自動重送,受控核對同案。

加入防連點與結果不明處理

主要使用 Cursor 內建 AI;先附資料,再送出指令。

1.附上這些檔案與資料
  • 自己的service-site/frontend/inquiry.html、inquiry.js、config.js與完整styles.css
  • 隨起始包提供的API_CONTRACT.html、START_HERE.html與實際Network紀錄;不附管理密碼
  • 正常與422/503/disconnect的實際回應,pending前後操作表
2.貼到哪裡
  1. 在 Cursor 開啟自己的本關練習副本,進入內建 AI 對話;正常版與故障副本分開。
  2. 用 @ 附上本關指定檔案,核對完整路徑;補實際觀察、輸入與結果,再貼下方 Prompt。
  3. 先讀回覆與差異,只保存指定範圍;回到瀏覽器實際檢查。版本保存由自己操作,不讓 AI 代替驗收或提交。
3.預期回覆與操作
  • 請AI加pending、8秒逾時與欄位錯誤對應,不改契約。
  • 結果不明不自動重送,五欄與已知成功規則保留。
4.自己檢查結果
  • 連點不產第二請求,錯誤後恢復適當操作。
  • 結果不明不自動重送,五欄與已知成功規則保留。
加入防連點與結果不明處理 Prompt(可收合)

你是協助零基礎學員的網站開發助手。我使用 Cursor 免費版編輯原生 HTML、CSS、JavaScript;必要時把你提供的內容手動貼入檔案。

情境與本次輸入:承接第17堂已讀取服務的真實教學後端。POST /api/inquiries JSON只含name/email/serviceId/subject/message;201 {case:{id,status,createdAt}}且id為QH-UUID才成功。422為欄位錯誤、503 save_failed尚未保存;其他斷線逾時或格式不明先核對不自動重送。管理登入前端下堂才做,受控保存核對用backend/manage.mjs inspect --id,不公開全部案件。資料在backend/.data,重啟仍在;身份session重啟失效與資料保存不同。 詢問POST須附Idempotency-Key header,由前端crypto.randomUUID產生;同頁同五欄重試沿用key,改內容才換新key。後端持久去重,同key不同內容409,管理與公開回應不含內部key/摘要。

本次任務:只改善既有POST流程:pending防重複並禁用送出,finally恢復服務可用時的操作;AbortController按config.timeoutMs(預設8000)停止等待。422把error.fields安全文字放到對應欄並聚焦第一錯誤;503 save_failed明示尚未保存;其他斷線/逾時/缺成功格式明示結果不明、保留五欄,先核對案件再決定手動重試,絕不自動重送。保留201/QH-id成功判斷、服務讀取、草稿與APPA,不改後端契約。列pending、422、503、保存後disconnect與正常同案回歸。 保留同頁相同資料的Idempotency-Key,後端同key只回同案;pending防連點不能代替伺服器防重複。

請先閱讀我附上的相關檔案或資料,資訊缺漏時精確列出需要補充的項目,不猜檔名、API 或測試結果。說明以繁體中文撰寫,指出檔案與修改位置;檢查結果區分已知、待驗與未完成。只處理學生自己的練習副本,不改現有展示網站,不要求付費訂閱。
Cursor AI 無法使用?改用 ChatGPT 備援

把上方指定的檔案內容、清單與補充資料,連同同一份 Prompt 貼入 ChatGPT 對話。只貼電腦上的路徑,無法讓它讀取你的檔案。

收到程式碼時,先核對檔名與修改位置,再手動存回自己的練習副本;若收到檢查表或補檔步驟,就逐項操作。不要把 Prompt 或程式碼框的反引號貼進 HTML/CSS。

兩邊都受限時,可先看既有參考成果、檢查差異與手動修改;未做過的 AI 生成或公開發布仍記待完成。不要貼入帳密、金鑰或真實個資。

複製只取得 Prompt 文字,檔案需自行在 Cursor 附上;本頁不會呼叫 AI 或自動完成關卡。

卡住時,APPA 給你一點線索

線索 1|先找現象與證據

pending要在第一個await之前設,finally再恢復。

線索 2|再縮小修改範圍

斷回應模式是真正保存後中斷,適合核對沒有自動重送。

回到自己的作品,逐項檢查

  • 連點不產第二請求,錯誤後恢復適當操作。
  • 結果不明不自動重送,五欄與已知成功規則保留。
  • 未實際完成的AI、發布或裝置驗收記待完成。
需要對照?看這一關的參考成果

先檢查自己的作品,再對照差異。開啟參考不會算完成。

查看前端參考畫面(完整操作請下載參考包)(另開分頁)

線上只看前端畫面;完整操作請下載。本頁不提供案件API。把參考包解壓到新的資料夾,先讀 OPEN_REFERENCE.html,再啟動隨包後端;不要覆蓋自己的作品或案件。

下載本關可啟動參考包

看參考包啟動與資料保留步驟

尚未完成可以先往下看,之後再回來補做。

保留依據與結果,再帶著作品往下走。

保留自己的修改差異與檢查結果。完成兩項操作確認再往下一關;也可以先閱讀,稍後補做。

關卡紀錄由你自行確認;本頁不會讀取 Cursor 檔案或自動驗收作品。

留下自己的檢查紀錄

這是第 18 堂共用筆記,換關卡仍會保留。未實際做過的操作寫「待完成」。

重設會清除第 18 堂六步勾選,筆記、另一堂進度與網站檔案保留。