繁体   English   中英

Golang net / http请求Body总是空的

[英]Golang net/http request Body always empty

我正在尝试将JSON参数发送到我的服务器并使用json.Decoder解析它们。 我已经读过你应该能够从request.Body属性中获取查询参数。 以下是我的服务器代码:

func stepHandler(res http.ResponseWriter, req *http.Request) {
    var v interface{}
    err := json.NewDecoder(req.Body).Decode(&v)
    if err != nil {
       // handle error
    }
    log.Println(v)
}

每一次,我都看到2014/12/26 22:49:23 <nil> (差异时间戳,当然)。 我的客户端AJAX调用如下:

$.ajax({
  url: "/step",
  method: "get",
  data: {
    steps: $("#step-size").val(),
    direction: $("#step-forward").prop("checked") ? 1 : -1,
    cells: JSON.stringify(painted)
  },
  success: function (data) {
    painted = data;
    redraw();
  },
  error: function (xhr) {
    console.log(xhr);
  }
});

发送内容的示例网址:

http://localhost:5000/?steps=1&direction=1&cells=%5B%7B%22row%22%3A11%2C%22column%22%3A15%7D%2C%7B%22row%22%3A12%2C%22column%22%3A15%7D%5D

更好看的参数:

{
  steps: "1",
  direction: "1",
  cells: "[{"row":11,"column":15},{"row":12,"column":15}]"
}

我尝试了GET和POST请求。

为什么我的req.Body永远不会解码? 如果我试图单独打印req.Body,我也看到没有。

req.Body确实是空的 - 所以,我会做的就是调用req.ParseForm() ,然后使用req.Form代替。 Body不会得到的东西(如查询参数),这绝对不是请求体。

请求的Body在有效负载内部发送 - 它不是URL的一部分。

您正试图访问正文..当您的数据确实在URL中时。

你希望它改变你的ajax method: "get"method: "post" - 这样数据就会与主体一起发布而不是作为URL的一部分发布。 您还应确保通过您选择的浏览器“开发人员工具”将数据与请求一起发送。 或者,如果您确实希望将数据作为URL的一部分发送,则应该访问请求的URL参数 - 并手动将值解析为结构(json包不会为您执行此操作IIRC)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM