Golang net/http 请求体总是空的

我正在尝试将 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);

  }

});

发送内容的示例 URL:


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,我也会看到 nil。


白板的微信
浏览 349回答 2
2回答

回首忆惘然

req.Body确实是空的——所以,我会调用它req.ParseForm()然后使用它req.Form。Body不会获得绝对不在请求正文中的内容(例如查询参数)。

守着一只汪

该Body请求沿着有效载荷内发送-它不是URL的一部分。您正在尝试访问正文 .. 当您的数据确实在 URL 中时。你想让它改变你的 ajaxmethod: "get"是什么method: "post"- 以便数据与正文一起发布,而不是作为 URL 的一部分。您还应该确保数据确实通过您选择的浏览器的开发人员工具与请求一起发送。或者,如果您确实希望将数据作为 URL 的一部分发送,您应该访问URL请求的参数 - 并手动将值解析为结构(json 包不会为您执行此操作 IIRC)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go