我正在尝试将 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。
2 回答
回首忆惘然
TA贡献1847条经验 获得超11个赞
req.Body
确实是空的——所以,我会调用它req.ParseForm()
然后使用它req.Form
。Body
不会获得绝对不在请求正文中的内容(例如查询参数)。
守着一只汪
TA贡献1872条经验 获得超3个赞
该Body
请求沿着有效载荷内发送-它不是URL的一部分。
您正在尝试访问正文 .. 当您的数据确实在 URL 中时。
你想让它改变你的 ajaxmethod: "get"
是什么method: "post"
- 以便数据与正文一起发布,而不是作为 URL 的一部分。您还应该确保数据确实通过您选择的浏览器的开发人员工具与请求一起发送。或者,如果您确实希望将数据作为 URL 的一部分发送,您应该访问URL
请求的参数 - 并手动将值解析为结构(json 包不会为您执行此操作 IIRC)。
- 2 回答
- 0 关注
- 348 浏览
添加回答
举报
0/150
提交
取消