Добавление параметров в XMLHttpRequests вызывает ошибку 405 - PullRequest
1 голос
/ 08 мая 2019

Я могу успешно отправить XMLHttpRequest без параметров, используя этот код:

файл шаблона:

xhr.open('POST', '/mytemplate');
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.onload = function() {
   if (xhr.status == 200) {
      alert('success');
   }
   else {
      alert('failed:' + xhr.status);
   }
}
xhr.send();

router:

r.HandleFunc("/mytemplate", MyHandler).Methods("POST")

Но как только я попытаюсьчтобы добавить параметры я получаю ошибку 405.Я только изменяю 2 строки, не знаю, что я делаю неправильно:

файл шаблона:

xhr.open('POST', '/mytemplate?param1='+var1+'&param2='+var2+'&param3='+var3);

маршрутизатор:

r.HandleFunc("/mytemplate/{param1}/{param2}/{param2}", MyHandler).Methods("POST")

Ответы [ 2 ]

2 голосов
/ 08 мая 2019

Вы обрабатываете маршрут, который выглядит следующим образом:

/mytemplate/some/variables/here

Но вы отправляете запрос на /mytemplate с параметрами запроса, например:

/mytemplate?param1=some&param2=variables&param3=here

Горилла Мукс не подойдет для них.Если вы хотите сопоставить параметры запроса, а не параметры URL, см. Метод .Queries в документации Gorilla Mux .

2 голосов
/ 08 мая 2019

Ваши параметры в команде open определены как параметры запроса URL (все после ?).
Но вы добавили их в качестве параметров пути URL при вызове r.HandleFunc.

Попробуйте обработать базовый путь /mytemplate с помощью r.HandleFunc, а затем проанализируйте параметры запроса в функции MyHandler с помощью r.URL.Query(). Это должно вернуть карту параметров запроса, на которую вы сможете ссылаться по ключу (param1, param2 ...).

Пример заглушки ниже:

func myHandler(w http.ResponseWriter, r *http.Request) {
    //get the query vals
    values := r.URL.Query()

    //parse specific params
    param1 := values["param1"]

    //do other stuff
}

func main() {
    //define the handler
    http.HandleFunc("/myHandlerPath", myHandler)

    // do some other stuff?
    // ...

    // serve up the endpoint
    log.Fatal(http.ListenAndServe(":8081", nil))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...