2017-01-16 10 views
-1

Я пытаюсь сделать простой запрос POST, используя VueJS, в приложение, написанное в системе Beego (GoLang), но приложение не видит ввода. Все нормально, когда я использую стандартный запрос формы (нет ajax). Это мой VueJS код:Beego не принимает параметры ajax

storePost: function(event) { 
    axios.post("/api/posts/store", {body: "test"}).then(function(response) { 
     if (response.data.status == 200) { 
      this.posts.push(response.data.data); 
     }else { 
      console.log("error"); 
     } 
    }, function(response){ 
     console.log("error"); 
    }); 
} 

и это мой Beego код:

// router.go 
beego.Router("/api/posts/store", &controllers_API.PostsController{}, "post:Store") 

// PostsController.go 
func (this *PostsController) Store() { 
    fmt.Println(this.GetString("body")) 

    // some irrelevant code which handles the response... 
} 

fmt.Println всегда ничего не печатает. Когда я использую стандартные формы, fmt.Println без проблем печатает значение body.

+0

Вы можете увидеть трафик полезной нагрузки на вкладке сети в инструментах разработчика? просто чтобы убедиться, что на сервер отправлены фактические данные. – Sombriks

+0

no beego expert, но может быть, что конечная точка метода head также необходима, если вы переходите на перекрестный домен – RickyA

+0

@Sombriks Я проверил, и есть данные, {body: "test"} – Alen

ответ

0

Кажется, что Beego принимает данные только с этим заголовком: 'Content-Type': 'multipart/form-data' поэтому после того, как я добавил этот заголовок, все было в порядке. Поскольку я не знаю, как сделать это с axios я переключился на vue-resource и это пример кода, который работает с Beego:

this.$http.post("/", {test: "test"}, { 
    emulateJSON: true 
}); 

Теперь вы можете распечатать его, как это:

fmt.Println(this.GetString("test")) 

Я надеюсь, что это поможет кому-то

0

Только что подтвердил, что axios и vue-resource используют application/json по умолчанию. emulateJSON вы используете здесь tells vue-resource to use application/x-www-form-urlencoded. Вам, вероятно, просто нужно сделать json-декодирование в beego, потому что оно по умолчанию обрабатывает тело запроса как urlencoded.

multipart/form-data работает, вероятно, потому, что он был там долго (например, urlencoded), поэтому beego по умолчанию его распознает. Чтобы использовать vue-resource для отправки запроса multipart/form-data: use FormData. Axios also accepts a FormData as data.

 Смежные вопросы

  • Нет связанных вопросов^_^