我正在尝试将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调用如下:
2014/12/26 22:49:23 <nil>
$.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。
req.Body确实是空的-因此,我将其称为“调用” req.ParseForm(),然后req.Form改为使用。Body不会获得绝对不在请求正文中的内容(例如查询参数)。
req.Body
req.ParseForm()
req.Form
Body