Я пытаюсь отправить аргументы JSON на свой сервер и проанализировать их с помощью json.Decoder. Я прочитал, что вы должны иметь возможность получить параметры запроса из свойства request.Body. Ниже мой код сервера:Golang net/http request Тело всегда пусто
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>
(Diff метки времени, конечно). Мой стороне клиента 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
приятнее взгляд на Params:
{
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'? Что создавало у вас впечатление, что «Тело» каким-то образом получит материал (параметры запроса), которые, безусловно, ** не ** в теле запроса? –
У меня, казалось, было непонимание того, на что ссылается req.Body. req.Form дает мне карту - есть ли способ автоматически развязать строку запроса в объект? –
@AlexMartelli, я пошел с вашим решением. Если вы создадите ответ, я могу отметить его как разрешение этого вопроса. Спасибо огромное! –