完整解釋
白話:前端把三個有名字的欄位排成表單字串,後端用相同名字逐格取回。
正式說法:`URLSearchParams` 產生 `application/x-www-form-urlencoded` 形式的 name/value pairs;Apps Script web app 的 event object 會將單值參數提供於 `e.parameter`。
何時使用:原生表單以 fetch 送到 Apps Script,且 doPost 使用 e.parameter 接收時。
修改前後:Before:request body 是 JSON,但 doPost 查 e.parameter.email。After:body 與接收端都使用同一組表單欄名。
常見混淆:`e.parameters` 的值是陣列,`e.parameter` 取每個參數的第一個值;本章單值表單使用後者。
名詞與最小範例
URLSearchParams 與 e.parameter Form-encoded request and event parameters
- 白話
- 前端把三個有名字的欄位排成表單字串,後端用相同名字逐格取回。
- 正式定義
- `URLSearchParams` 產生 `application/x-www-form-urlencoded` 形式的 name/value pairs;Apps Script web app 的 event object 會將單值參數提供於 `e.parameter`。
- 何時使用
- 原生表單以 fetch 送到 Apps Script,且 doPost 使用 e.parameter 接收時。
- 最小範例
- `new URLSearchParams({ name: '小安', email: 'an@example.test', message: '想詢價' })`
- 驗收證據
- inputCount=3、remoteRequests=0、result 含 name=、email=、message=
- 常混淆
- `e.parameters` 的值是陣列,`e.parameter` 取每個參數的第一個值;本章單值表單使用後者。
Micro Lab|URLSearchParams 與 e.parameter
情境:前端 Network 看得到 JSON body,但 Apps Script 回覆『Email 必填』。
起始狀態:三個測試欄位只存在記憶體物件,尚未編碼。
- 在本地把三欄 payload 編碼,讀取 result 並確認沒有任何遠端 request。
- 執行下方操作,觀察獨立的 DOM 與資料狀態。
- 依證據欄位重新驗收。
目前主題:URLSearchParams 與 e.parameter
預期:operation=encode-form、inputCount=3、remoteRequests=0,result 同時包含 name、email、message 的百分比編碼。
證據:inputCount=3、remoteRequests=0、result 含 name=、email=、message=
第一個檢查:先比較 request Content-Type/body 與 doPost 實際讀取方式是否相同。
重設:丟棄編碼 result 並恢復本地 payload;不觸碰測試或正式 deployment。
卡住時
- 症狀:doPost 收到 request,e.parameter 卻沒有欄位。
可能原因:前端用 JSON.stringify,或 input 缺 name/前後端欄名不同。
先檢查:在本地先列出 URLSearchParams keys,再對照 doPost 讀取名稱。
修正:統一使用 form-encoded payload 與 name/email/message 三個契約欄位。
本模組官方來源:Google Apps Script|Web Apps