我无法解码从我的 JavaScript 文件中获取的 JSON(处理请求的服务器是用 go 编写的)
为了发送请求,我使用了以下 JavaScript 代码。
function Connect() {
var data = JSON.stringify({
Version: "0.1",
Action: "test",
Data: {}
});
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == XMLHttpRequest.DONE) {
if(xhr.status >= 200 && xhr.status < 300) {
console.log(xhr.responseText);
} else {
console.warn(xhr);
}
}
};
xhr.open("Post", "http://localhost:5252", true);
xhr.setRequestHeader('Content-Type', 'application/json; charset=utf-8');
xhr.send(data);
}
据我所知,这应该可以将 JSON 发送到服务器。 我的服务器收到了请求,但我无法对其进行解码。
func newRequestFromJSON(jsonData io.Reader) (*Request, error) {
// Decode the JSON to the request value.
decoder := json.NewDecoder(jsonData)
var r Request
err := decoder.Decode(&r)
if err != nil {
return nil, e.New(err.Error() + " at " + u.GetFile_line())
}
return &r, nil
}
请求结构如下所示。
type Request struct {
Version string
Action string
Data interface{}
}
然后 io.reader 获取 request.body 作为参数。该代码在以下情况下有效我使用 firefox 的 HttpRequester 插件发送同样的东西。
我收到一个 EOF 错误,它表示请求为零。我认为请求的正文是空的,但我不确定。
我在这里错过了什么?
最佳答案
如果有人有同样的问题: 我终于想通了我必须在我的服务器中进行哪些更改才能允许此类 CORS 请求。
func init() {
http.HandleFunc("/", net.HandleRequest)
}
func HandleRequest(rw http.ResponseWriter, req *http.Request) {
// Recover panics and send the error.
if origin := req.Header.Get("Origin"); origin != "" {
rw.Header().Set("Access-Control-Allow-Origin", origin)
rw.Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE")
rw.Header().Set("Access-Control-Allow-Headers",
"Accept, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization")
}
if req.Method == "OPTIONS" {
return
}
...(normally handling real request)
关于javascript - 解码从 Javascript 发送到 golang 服务器的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40161242/