第 18 堂|讓詢問真正成為一筆案件
依契約送出五欄,記住伺服器編號,分清失敗與結果不明,確認重啟後仍保存。
成功依後端格式,不依畫面猜測
實際201與伺服器id才成功,沒有前端編號。
先準備
- 自己的service-site/frontend/inquiry.html、inquiry.js、config.js與完整styles.css
- 隨起始包提供的API_CONTRACT.html、START_HERE.html與實際Network紀錄;不附管理密碼
- 實際POST欄位與201成功格式、自己的唯一主旨與同案檢查表
送出會改變持久資料,必須依201與case.id判斷。這堂保留公開回應白名單,不能為了查核開放所有案件。
先分清自己的作品、線上畫面與可啟動參考包;線上參考不提供API,請在本機閱讀隨包OPEN_REFERENCE.html後操作。
一起拆解:用回傳id追同一筆詢問
本關18分鐘觀念:3分鐘看輸入、6分鐘逐步推演、5分鐘正常與錯誤對照、4分鐘先預測再說明。
這次的輸入
五欄填虛構資料及唯一主旨;後端成功回201與QH-UUID。
POST /api/inquiries
Idempotency-Key: 同次詢問的隨機識別
201 {case:{id:"QH-…",status:"pending",createdAt:"…"}}這段是觀念縮圖,完整可操作檔案在本關參考成果;請依當前階段判讀,不把片段直接貼到任意位置。
一步一步推演
- 先核對body只有五欄,識別放header,不貼密碼給AI。
- 只有201且id格式有效才說已保存;同頁同內容重試沿用同key。
- 記實際id,以manage inspect及重啟後讀同id核對;範例QH-…不能抄成證據。
正常應看到
畫面編號與真正持久案件相同,重送相同識別不增加第二案。
常見錯誤對照
用Date.now在前端編一個號碼,不能證明後端保存。
先預測,再說明原因
如果重整頁面才重送,為何仍要先核對是否已有同主旨案件?
跟著觀察
- 先讀「用回傳id追同一筆詢問」的輸入,指出本關實際檔案或資料。
- 如果重整頁面才重送,為何仍要先核對是否已有同主旨案件?
- 依例子逐步說明正常結果與錯誤差別,再記下自己的預測;參考結果不是已完成的實測。
做完,自己確認
- 實際201與伺服器id才成功,沒有前端編號。
- 能指出指定檔案與作用範圍。
取得真正的案件編號
實際201與伺服器id才成功,沒有前端編號。
先準備
- 自己的service-site/frontend/inquiry.html、inquiry.js、config.js與完整styles.css
- 隨起始包提供的API_CONTRACT.html、START_HERE.html與實際Network紀錄;不附管理密碼
- 實際POST欄位與201成功格式、自己的唯一主旨與同案檢查表
親手寫唯一主旨,送出後記實際id與Network。
跟著做
- 用虛構五欄與唯一主旨,核對契約成功格式。
- 請AI接POST與201/id判斷,不用localStorage案件模擬。
- 用受控manage工具讀同id,停止重啟後再核對主旨與服務。
串接詢問建立與真實保存
主要使用 Cursor 內建 AI;先附資料,再送出指令。
- 1.附上這些檔案與資料
- 自己的service-site/frontend/inquiry.html、inquiry.js、config.js與完整styles.css
- 隨起始包提供的API_CONTRACT.html、START_HERE.html與實際Network紀錄;不附管理密碼
- 實際POST欄位與201成功格式、自己的唯一主旨與同案檢查表
- 2.貼到哪裡
- 在 Cursor 開啟自己的本關練習副本,進入內建 AI 對話;正常版與故障副本分開。
- 用 @ 附上本關指定檔案,核對完整路徑;補實際觀察、輸入與結果,再貼下方 Prompt。
- 先讀回覆與差異,只保存指定範圍;回到瀏覽器實際檢查。版本保存由自己操作,不讓 AI 代替驗收或提交。
- 3.預期回覆與操作
- 請AI接POST與201/id判斷,不用localStorage案件模擬。
- 重啟後由受控工具核對同案,原輸入保留。
- 4.自己檢查結果
- 實際201與伺服器id才成功,沒有前端編號。
- 重啟後由受控工具核對同案,原輸入保留。
串接詢問建立與真實保存 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 /api/inquiries,只送trim後name/email/serviceId/subject/message,credentials:include與JSON Content-Type。只有response.status=201且case.id是QH-開頭的伺服器編號才顯示已保存;錯誤、非JSON、缺id不編假號。保留五欄與草稿,資料不清空,不公開管理列表。更新送出按鈕與階段說明,分清真正保存與本機草稿。提供同主旨/id以manage inspect及重啟後核對的步驟,不替我假填成功。本關先接基本POST,下關再加pending、逾時與欄位對應。 另依契約加Idempotency-Key header:同頁相同JSON資料重試沿用crypto.randomUUID產生的key,修改資料才換新key。由講師後端做持久防重複,不自行造第二個案件;body仍只五欄。
請先閱讀我附上的相關檔案或資料,資訊缺漏時精確列出需要補充的項目,不猜檔名、API 或測試結果。說明以繁體中文撰寫,指出檔案與修改位置;檢查結果區分已知、待驗與未完成。只處理學生自己的練習副本,不改現有展示網站,不要求付費訂閱。Cursor AI 無法使用?改用 ChatGPT 備援
把上方指定的檔案內容、清單與補充資料,連同同一份 Prompt 貼入 ChatGPT 對話。只貼電腦上的路徑,無法讓它讀取你的檔案。
收到程式碼時,先核對檔名與修改位置,再手動存回自己的練習副本;若收到檢查表或補檔步驟,就逐項操作。不要把 Prompt 或程式碼框的反引號貼進 HTML/CSS。
兩邊都受限時,可先看既有參考成果、檢查差異與手動修改;未做過的 AI 生成或公開發布仍記待完成。不要貼入帳密、金鑰或真實個資。
複製只取得 Prompt 文字,檔案需自行在 Cursor 附上;本頁不會呼叫 AI 或自動完成關卡。
做完,自己確認
- 實際201與伺服器id才成功,沒有前端編號。
- 重啟後由受控工具核對同案,原輸入保留。
線上只看前端畫面;完整操作請下載。本頁不提供案件API。把參考包解壓到新的資料夾,先讀 OPEN_REFERENCE.html,再啟動隨包後端;不要覆蓋自己的作品或案件。
下載本關可啟動參考包明確失敗與結果不明要分開
連點不產第二請求,錯誤後恢復適當操作。
先準備
- 自己的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秒:原回應可能已無法接收這段是觀念縮圖,完整可操作檔案在本關參考成果;請依當前階段判讀,不把片段直接貼到任意位置。
一步一步推演
- 先測連點只發一次,並保留五欄。
- 切slow或disconnect,將結果標未確認,不自動重送;503 save_failed另標尚未保存。
- 用受控工具依主旨找同id,恢復normal再決定是否手動重試。
正常應看到
不把網路結果不明誤報失敗或成功;資料與案件都可追查。
常見錯誤對照
逾時後自動換新key再送,可能產生重複詢問。
先預測,再說明原因
422、503尚未保存、逾時三種情況,哪一種必須先查同案?
跟著觀察
- 先讀「逾時不等於沒有保存」的輸入,指出本關實際檔案或資料。
- 422、503尚未保存、逾時三種情況,哪一種必須先查同案?
- 依例子逐步說明正常結果與錯誤差別,再記下自己的預測;參考結果不是已完成的實測。
做完,自己確認
- 連點不產第二請求,錯誤後恢復適當操作。
- 能指出指定檔案與作用範圍。
請求進行中,不要送第二次
連點不產第二請求,錯誤後恢復適當操作。
先準備
- 自己的service-site/frontend/inquiry.html、inquiry.js、config.js與完整styles.css
- 隨起始包提供的API_CONTRACT.html、START_HERE.html與實際Network紀錄;不附管理密碼
- 正常與422/503/disconnect的實際回應,pending前後操作表
親手記下連點、422、503與結果不明四種預期,再實際測。
跟著做
- 保持已有POST,只列出要補的防連點與錯誤狀態。
- 請AI加pending、8秒逾時與欄位錯誤對應,不改契約。
- 測已填值保留、一次請求、斷回應後不自動重送,受控核對同案。
加入防連點與結果不明處理
主要使用 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.貼到哪裡
- 在 Cursor 開啟自己的本關練習副本,進入內建 AI 對話;正常版與故障副本分開。
- 用 @ 附上本關指定檔案,核對完整路徑;補實際觀察、輸入與結果,再貼下方 Prompt。
- 先讀回覆與差異,只保存指定範圍;回到瀏覽器實際檢查。版本保存由自己操作,不讓 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 或自動完成關卡。
做完,自己確認
- 連點不產第二請求,錯誤後恢復適當操作。
- 結果不明不自動重送,五欄與已知成功規則保留。
線上只看前端畫面;完整操作請下載。本頁不提供案件API。把參考包解壓到新的資料夾,先讀 OPEN_REFERENCE.html,再啟動隨包後端;不要覆蓋自己的作品或案件。
下載本關可啟動參考包錯誤分支不能造案件編號
503不再有假編號,錯誤與原值保留。
先準備
- 自己的service-site/frontend/inquiry.html、inquiry.js、config.js與完整styles.css
- 隨起始包提供的API_CONTRACT.html、START_HERE.html與實際Network紀錄;不附管理密碼
- fault-L18非成功分支、503 JSON、假成功畫面與重現步驟
故障把非成功回應顯示DEMO-FAKE。應保留原欄位與明確錯誤,不用畫面假裝已收到。
一起拆解:不要用假號碼補救失敗
本關18分鐘觀念:3分鐘看輸入、6分鐘逐步推演、5分鐘正常與錯誤對照、4分鐘先預測再說明。
這次的輸入
故障副本遇HTTP失敗,卻進入顯示DEMO-FAKE的分支。
失敗回應 → 顯示實際錯誤/未確認
不可:失敗回應 → 自造case.id → 宣稱保存這段是觀念縮圖,完整可操作檔案在本關參考成果;請依當前階段判讀,不把片段直接貼到任意位置。
一步一步推演
- 先以inquiry=error記503與假成功文字,核對資料未新增。
- 只修錯誤分支,保留201/id判斷、pending與同key重試。
- 恢復normal送一筆,再以同id重啟核對,其他輸入不清空。
正常應看到
失敗不冒出案件編號;真正成功仍依後端證據。
常見錯誤對照
把503改成200或在localStorage加一案,都不是修復保存流程。
先預測,再說明原因
修好後正常201也顯示錯誤,代表哪個分支需要回歸?
跟著觀察
- 先讀「不要用假號碼補救失敗」的輸入,指出本關實際檔案或資料。
- 修好後正常201也顯示錯誤,代表哪個分支需要回歸?
- 依例子逐步說明正常結果與錯誤差別,再記下自己的預測;參考結果不是已完成的實測。
做完,自己確認
- 503不再有假編號,錯誤與原值保留。
- 能指出指定檔案與作用範圍。
拒絕假成功,回到真正回應
503不再有假編號,錯誤與原值保留。
先準備
- 自己的service-site/frontend/inquiry.html、inquiry.js、config.js與完整styles.css
- 隨起始包提供的API_CONTRACT.html、START_HERE.html與實際Network紀錄;不附管理密碼
- fault-L18非成功分支、503 JSON、假成功畫面與重現步驟
自己先比較HTTP503、JSON無case與畫面假編號。
跟著做
- 獨立fault-L18配教學error模式重現假成功。
- 請AI只移除錯誤分支中的DEMO-FAKE與return。
- 回到正常版測503無編號,恢復normal再同案保存與重啟核對。
移除送出失敗的假成功分支
主要使用 Cursor 內建 AI;先附資料,再送出指令。
- 1.附上這些檔案與資料
- 自己的service-site/frontend/inquiry.html、inquiry.js、config.js與完整styles.css
- 隨起始包提供的API_CONTRACT.html、START_HERE.html與實際Network紀錄;不附管理密碼
- fault-L18非成功分支、503 JSON、假成功畫面與重現步驟
- 2.貼到哪裡
- 在 Cursor 開啟自己的本關練習副本,進入內建 AI 對話;正常版與故障副本分開。
- 用 @ 附上本關指定檔案,核對完整路徑;補實際觀察、輸入與結果,再貼下方 Prompt。
- 先讀回覆與差異,只保存指定範圍;回到瀏覽器實際檢查。版本保存由自己操作,不讓 AI 代替驗收或提交。
- 3.預期回覆與操作
- 請AI只移除錯誤分支中的DEMO-FAKE與return。
- 正常201與同案重讀仍成功,異常不自動重送。
- 4.自己檢查結果
- 503不再有假編號,錯誤與原值保留。
- 正常201與同案重讀仍成功,異常不自動重送。
移除送出失敗的假成功分支 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/摘要。
本次任務:故障程式在if(!response.ok)內先say案件已保存DEMO-FAKE並return,實際503沒有case。只移除這個注入的假成功語句與return,讓原422/503/結果不明處理恢復。保留正常201/QH-id、pending、timeout、欄位值與草稿,不改後端資料湊成功。列503無假號、normal真保存、disconnect不自動重送、同id重啟核對,未做標待測。 保留Idempotency-Key及201格式驗證,不移除後端去重機制。
請先閱讀我附上的相關檔案或資料,資訊缺漏時精確列出需要補充的項目,不猜檔名、API 或測試結果。說明以繁體中文撰寫,指出檔案與修改位置;檢查結果區分已知、待驗與未完成。只處理學生自己的練習副本,不改現有展示網站,不要求付費訂閱。Cursor AI 無法使用?改用 ChatGPT 備援
把上方指定的檔案內容、清單與補充資料,連同同一份 Prompt 貼入 ChatGPT 對話。只貼電腦上的路徑,無法讓它讀取你的檔案。
收到程式碼時,先核對檔名與修改位置,再手動存回自己的練習副本;若收到檢查表或補檔步驟,就逐項操作。不要把 Prompt 或程式碼框的反引號貼進 HTML/CSS。
兩邊都受限時,可先看既有參考成果、檢查差異與手動修改;未做過的 AI 生成或公開發布仍記待完成。不要貼入帳密、金鑰或真實個資。
複製只取得 Prompt 文字,檔案需自行在 Cursor 附上;本頁不會呼叫 AI 或自動完成關卡。
做完,自己確認
- 503不再有假編號,錯誤與原值保留。
- 正常201與同案重讀仍成功,異常不自動重送。
線上只看前端畫面;完整操作請下載。本頁不提供案件API。把參考包解壓到新的資料夾,先讀 OPEN_REFERENCE.html,再啟動隨包後端;不要覆蓋自己的作品或案件。
下載本關可啟動參考包留下自己的檢查紀錄
記下實際做過的操作、差異與結果。還沒做的項目寫「待完成」。
勾選與筆記只保存在這個瀏覽器。
重設只清除勾選,網站檔案與檢查筆記都保留。