【发布时间】:2016-10-20 17:50:59
【问题描述】:
我无法解码从我的 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
}
Request 结构如下所示。
type Request struct {
Version string
Action string
Data interface{}
}
io.reader 获取 request.body 作为参数。该代码适用于例如我使用 firefox 的 HttpRequester 插件发送相同的内容。
我收到一个 EOF 错误,它说请求为零。我认为请求的正文是空的,但我不确定。
我在这里错过了什么?
【问题讨论】:
-
如果您的代码在一种情况下有效,则意味着
newRequestFromJSON有效。请说明在失败的情况下您是如何使用该功能的。 -
检查浏览器中的网络选项卡以查看请求。您应该能够查看请求部分,其中将包含有效负载。
-
在这两种情况下,方法的调用方式相同(通过处理传入请求的句柄函数)我检查了网络选项卡,发现有一个“跨源请求被阻止”错误 - 这就是原因?但是为什么会出现这样的错误,因为一切都在同一台机器上运行...
标签: javascript json go decode