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