title: GoLang/Javascript: Empty postForm and decode(body) on JSON POST
body: <p>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.</p>
  
  <p><a href="https://stackoverflow.com/a/13038218/4808079"><em>This post</em></a> shows the way I'm posting my JSON in Javascript and <a href="https://stackoverflow.com/a/15685432/4808079"><em>this post</em></a> shows the way I'm trying to process this JSON in Go.</p>
  
  <pre><code>//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));
  </code></pre>
  
  <p><a href="https://stackoverflow.com/a/29439630/4808079">The header below was set from this answer</a></p>
  
  <pre><code>//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 -&gt; `map[]`  would be `map[string]string` I think
      fmt.Println(r.PostForm["hat"]);   //out -&gt; `[]`  would be `fez` or `["fez"]`
      fmt.Println(r.Body);              //out -&gt; `&amp;{0xc82000e780 &lt;nil&gt; &lt;nil&gt; 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(&amp;t)
      if err != nil {
          fmt.Println(err);
      }
      fmt.Println(t);                  //out -&gt; `{ }`
  }
  </code></pre>
  
  <p>I'm not really sure what else to try from here.  What should I change to make this work?</p>