這是調用的javascript函數(shù):function cwk_submit_form() { var form = document.getElementById("FORM_ID") var XHR = new XMLHttpRequest(); const FD = new FormData( form ); for (const element of FD.entries()) { console.log(element) } XHR.open( "POST", "http://localhost:8080/post_data" ); XHR.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); XHR.send( FD );}我console.log在里面提到這確實打印出正確的數(shù)據(jù),這意味著問題似乎出在數(shù)據(jù)的傳輸方式上。接收響應的 Golang 代碼是:func post_data(w http.ResponseWriter, r *http.Request) { log.Println("post was called") r.ParseForm() for key, value := range r.Form { log.Printf("%s = %s\n", key, value) }}此 for 循環(huán)不打印任何內容。如果我像這樣使用 HTML 表單提交:<form action="//localhost:8080/post_data" method="POST"> <input type="text" name="field1" value="" maxLength="20"/> <input type="text" name="field2" value="" maxLength="20"/> <input type="submit" value="Sign in"/></form>然后上面的 Golang 代碼工作正常,這讓我相信 XMLHttpRequest 格式是問題所在。
1 回答

蝴蝶不菲
TA貢獻1810條經(jīng)驗 獲得超4個贊
你猜對了,你的js代碼有問題。
對于所有請求,ParseForm 解析來自 URL 的原始查詢并更新 r.Form。
因此,當Content-Type
您發(fā)送并且實際內容類型與application/x-www-form-urlencoded
您的 HTML 表單案例中發(fā)生的匹配時,它將起作用。
另一方面,當您使用 時FormData
,它將作為multipart/form-data
.
您需要將您的替換XHR.send(FD)
為XHR.send(new URLSearchParams(FD))
以發(fā)送數(shù)據(jù)application/x-www-form-urlencoded
。
- 1 回答
- 0 關注
- 145 瀏覽
添加回答
舉報
0/150
提交
取消