您可以在表單字段中發送數據,但通常您只需從response.Body
中讀取數據。這裏有一個最小的jQuery & App Engine的例子:
package app
import (
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"strings"
)
func init() {
http.HandleFunc("/", home)
http.HandleFunc("/target", target)
}
const homePage =
`<!DOCTYPE html>
<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
</head>
<body>
<form action="/target" id="postToGoHandler">
<input type="submit" value="Post" />
</form>
<div id="result"></div>
<script>
$("#postToGoHandler").submit(function(event) {
event.preventDefault();
$.post("/target", JSON.stringify({"Param1": "Value1"}),
function(data) {
$("#result").empty().append(data);
}
);
});
</script>
</body>
</html>`
func home(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, homePage)
}
type Message struct {
Param1 string
}
func target(w http.ResponseWriter, r *http.Request) {
defer r.Body.Close()
if body, err := ioutil.ReadAll(r.Body); err != nil {
fmt.Fprintf(w, "Couldn't read request body: %s", err)
} else {
dec := json.NewDecoder(strings.NewReader(string(body)))
var m Message
if err := dec.Decode(&m); err != nil {
fmt.Fprintf(w, "Couldn't decode JSON: %s", err)
} else {
fmt.Fprintf(w, "Value of Param1 is: %s", m.Param1)
}
}
}
我的問題是,我不知道該請求的一部分(類型* http.Request)傳遞到解碼功能(這需要一個io.Reader作爲輸入)。 – Daniel
對於POST請求,請使用響應主體。這應該包含「原始」JSON數據(簡單地說就是一個JSON編碼的數據結構,它是一個簡單的字符串)。 –
它實際上取決於服務器,它是如何發回JSON數據的。它通常使用響應主體來完成。 –