為什麼會出現假成功?
使用 fetch 的 no-cors 模式時,前端無法讀取實際回應內容。如果程式只把「沒有拋出網路錯誤」當成成功,即使後端要求登入、執行失敗或沒有寫入資料,畫面仍可能顯示完成。
應該逐層確認什麼?
- 瀏覽器是否真的只送出一次 POST。
- Apps Script 是否收到相同的 requestToken。
- Sheet 是否完成寫入並產生 requestId。
- 狀態查詢是否回傳
ok=true、state=saved與非空 requestId。 - 前端是否只在上述條件成立時重置表單。
常見後端原因
- Web App 存取權限或執行帳號不正確。
- Spreadsheet 身分或工作表名稱錯誤。
- 表頭變更造成欄位對應失敗。
- 狀態在 Sheet 寫入前就被標記為成功。
- 通知寄送阻塞了 saved 狀態。
安全原則:畫面成功必須由後端已保存狀態證明,而不是依賴 no-cors POST 的完成狀態。
逾時時不要自動重送
狀態查詢逾時時,後端可能仍在處理。前端應保留 requestToken、顯示人工確認方式,且不得自動再送一次 POST,以免建立重複案件。