#javascript #json #go #decode
#javascript #json #Вперед #расшифровать
Вопрос:
Я не могу расшифровать JSON, который я получаю из моего файла JavaScript (сервер, обрабатывающий запросы, написан на 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 amp;amp; 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(amp;r)
if err != nil {
return nil, e.New(err.Error() " at " u.GetFile_line())
}
return amp;r, nil
}
Структура запроса выглядит следующим образом.
type Request struct {
Version string
Action string
Data interface{}
}
И io.reader получит запрос.тело в качестве параметра. Код работает, если, например, я отправляю то же самое с помощью плагина HttpRequester из Firefox.
Я получаю ошибку EOF, и в ней говорится, что запрос равен нулю. Я думаю, что тело запроса пустое, но я не уверен в этом.
Чего мне здесь не хватает?
Комментарии:
1. Если ваш код работает в одном случае, это означает, что
newRequestFromJSON
работает. Пожалуйста, покажите, как вы используете эту функцию в случае сбоя.2. проверьте вкладку сеть в браузере, чтобы просмотреть запрос. Вы должны иметь возможность просматривать часть запроса, которая будет включать полезную нагрузку.
3. В обоих случаях метод вызывается одинаково (через handlefunc, который обрабатывает входящие запросы) Я проверил вкладку «Сеть» и увидел, что там ошибка «Заблокирован запрос из разных источников» — это причина? Но почему возникает такая ошибка, поскольку все запущено на одном компьютере…
Ответ №1:
Если у кого-то такая же проблема: я, наконец, понял, какие изменения я должен сделать на своем сервере, чтобы разрешить такие запросы 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)