Lastor
coding 挖靠...... 想把前端的一個既有 $.post 改成 fetch,結果 PHP 拿不到 body 是啥鬼
Lastor
我看原本寫的 $.post 都指定說是 json 格式了
$.post("path", { ... }, callback, "json")
Lastor
結果改用 fetch 去 POST json 都打不到
Lastor
跑去查一下那支 PHP API,發現他是用 $_REQUEST 去取,google 查一下說這是取 formData 的寫法......???
Lastor
那原本 jQuery POST 上去的到底是 json 還是 formData,要命喔
Lastor
看起來應該是 jQuery 最終轉成 formData 傳上去...... 我覺得這有點基八毛
Lastor
這我真的矇了,測半天,fetch 用 json 去 POST 的話,PHP 那邊用 $_REQUEST 根本接不到。但是 jQuery 指定 json 是可以的
Lastor
如果我試著用 fetch 傳一個 formData 上去,有一個值要求的是 Array,我嘗試半天都沒辦法在 formData 整成一個 array 傳上去
Lastor
這應該是 formData 的限制...... 如果是這樣的話,那 jQuery 傳的應該就不是 formData,而是 json
Lastor
那為啥 jQuery 傳上去 PHP 接的到,用 fetch 傳卻不行
Lastor
==============
真的見鬼了,問同事他們也不知道為啥。反正我前端 POST 大概是這樣寫
https://imgs.plurk.com/QBr/LG1/GPwsjEmVKC1XJZGGSAbXAMnsgHI_lg.png
Lastor
而 PHP 那邊就單純的這種感覺去接
$series_id = $_REQUEST['series_id']
Lastor
到底為啥 jQuery 可以,fetch 傳上去的就接不到東西
Lastor
喔淦~~~ 我找到原因了
Lastor
被 jQuery 騙了,雖然他指定格式為 json
Lastor
但開 devtools 查 network,發現他其實傳的是 urlencoded,根本不是 json 啊 (翻桌
Lastor
所以 fetch 用 json 傳上去,PHP 吃不到是正常的。剛嘗試用 Postman 傳 json 也不行
Lastor
改用 formData 的話,我這支 API 的情況,他有兩個 key,一個要求是 number,另一個是 array
Lastor
麻煩的是這個 array,剛才測半天 formData 我都整不出 array
Lastor
後來去查才知道,原來要這樣...... key 屁股要加個 []
https://imgs.plurk.com/QBr/BJA/EMkXBDyTcncqiUCxtc8CEktcTOY_lg.png
Lastor
這樣傳上去之後,PHP 看到 tag_id[],會自動把 key value 整理成正常 array
Lastor
解決了是很開心,但最煩的是,熊熊想起來 formData 的這個坑,我以前好像碰過。居然完全忘了
載入新的回覆