這是呼叫的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 格式是問題所在。
uj5u.com熱心網友回復:
你的猜測是正確的,你的 js 代碼有問題。
對于所有請求,ParseForm 決議來自 URL 的原始查詢并更新 r.Form。
因此,當您發送的內容型別與您的 HTML 表單案例中發生Content-Type的實際內容型別匹配時,它將起作用。application/x-www-form-urlencoded
另一方面,當您使用 時FormData,它將被發送為multipart/form-data。
您需要將您的替換XHR.send(FD)為XHR.send(new URLSearchParams(FD))以發送資料application/x-www-form-urlencoded。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/475736.html
標籤:javascript 去
