这是调用的javascript函数: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在里面提到这确实打印出正确的数据,这意味着问题似乎出在数据的传输方式上。接收响应的 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 循环不打印任何内容。如果我像这样使用 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条经验 获得超4个赞
你猜对了,你的js代码有问题。
对于所有请求,ParseForm 解析来自 URL 的原始查询并更新 r.Form。
因此,当Content-Type
您发送并且实际内容类型与application/x-www-form-urlencoded
您的 HTML 表单案例中发生的匹配时,它将起作用。
另一方面,当您使用 时FormData
,它将作为multipart/form-data
.
您需要将您的替换XHR.send(FD)
为XHR.send(new URLSearchParams(FD))
以发送数据application/x-www-form-urlencoded
。
- 1 回答
- 0 关注
- 102 浏览
添加回答
举报
0/150
提交
取消