JSONデータをjavascriptページからgolangサーバーにPOSTしようとしていますが、JSONデータのトレースを見つけることができません。 SOは両側で答えを受け入れた。GoLang/Javascript:JSON POSTで空のpostFormとdecode(body)
This postは私がJavascriptでJSONを投稿する方法を示しており、this postはGoでこのJSONを処理する方法を示しています。
//js json post send
var request = new XMLHttpRequest();
request.open('POST', 'http://localhost:8080/aardvark/posts', true);
request.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
var data = {hat: "fez"};
request.send(JSON.stringify(data));
The header below was set from this answer
//Go json post response
func reply(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Access-Control-Allow-Origin", "*")
w.Header().Set("Access-Control-Allow-Credentials", "true")
w.Header().Set("Access-Control-Allow-Headers", "Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, accept, origin, Cache-Control, X-Requested-With")
w.Header().Set("Access-Control-Allow-Methods", "POST, OPTIONS, GET, PUT")
if err := r.ParseForm(); err != nil {
fmt.Println(err);
}
//this is my first impulse. It makes the most sense to me.
fmt.Println(r.PostForm); //out -> `map[]` would be `map[string]string` I think
fmt.Println(r.PostForm["hat"]); //out -> `[]` would be `fez` or `["fez"]`
fmt.Println(r.Body); //out -> `&{0xc82000e780 <nil> <nil> false true {0 0} false false false}`
type Hat struct {
hat string
}
//this is the way the linked SO post above said should work. I don't see how the r.Body could be decoded.
decoder := json.NewDecoder(r.Body)
var t Hat
err := decoder.Decode(&t)
if err != nil {
fmt.Println(err);
}
fmt.Println(t); //out -> `{ }`
}
私はここから試して他に何を本当にわかりません。この仕事をするために私は何を変えるべきですか?
あなたは 'r.Body'を使用しています。あなたがそれを印刷するときに奇妙に見える理由は、実際の内容ではなく、投稿された内容(つまり、io.Reader)を読むことができる構造を印刷しているからです。 – djd
の方がはるかに意味があります。 –
'ParseForm'はjson –