javascript - 解码从 Javascript 发送到 golang 服务器的 JSON

标签 javascript json go decode

我无法解码从我的 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/

相关文章:

google-app-engine - 谷歌应用引擎 Go WebApp

javascript - JQuery $(document).ready(function () 不工作

javascript - 将变量传递给 AngularJS Controller ,最佳实践?

javascript - 未捕获的语法错误 : Unexpected token '<' VueJS PWA

ios - 将 Codable 结构编码为 JSON 后如何存储数据

java - 如何将给定的数据解析为java对象

javascript - 我是在用这组组件思考 React 吗?

javascript - 如何在 JavaScript 中将对象属性设置为 null 和空白数组?

go - 发送单字节 net.Conn Go

mongodb - 了解 Golang 上下文超时