I'm trying to POST JSON data from a javascript page, into a golang server, but I'm unable to find any trace of the JSON data using the SO accepted answers on both ends.
This post shows the way I'm posting my JSON in Javascript and this post shows the way I'm trying to process this JSON in Go.
//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 -> `{ }`
}
I'm not really sure what else to try from here. What should I change to make this work?