vuejs FormData不发送json

时间:2017-12-09 16:26:24

标签: vue.js vuejs2 vue-resource nuxt.js

我不太确定是什么导致它,但我正在使用nuxtjs并尝试以json形式将@android:style/Theme.DeviceDefault.Light.DarkActionBarusername发送到我的Go服务器。这是我的vue代码:

password

我还试图删除<template> <div class="container"> <h1>Login</h1> <div> <label for="username" >Username</label> <input class="input-block" type="text" v-model="username"> </div> <div> <label for="password" >Password</label> <input class="input-block" type="password" v-model="password"> </div> <div> <button v-on:click="login">Login</button> </div> </div> </template> <script> import Vue from 'vue' import VueResource from 'vue-resource' Vue.use(VueResource) var loginURL = 'http://localhost:5000/login' export default { data () { return { username: [], password: [] } }, methods: { login: function () { NProgress.start() var formData = new FormData() formData.append('username', this.username) formData.append('password', this.password) this.$http.post(loginURL, formData, {emulateJSON: true}).then(response => { console.log(response) }, response => { console.log(response) }) } } } </script> ,但结果是一样的。

服务器Go代码如下所示:

{emulateJSON: true}

func LoginPOST(w http.ResponseWriter, r *http.Request) { var loginForm struct { Username string `json:"username"` Password string `json:"password"` } body, err := ioutil.ReadAll(r.Body) if err != nil { // return 422 return } fmt.Println("body string:", string(body)) err = json.Unmarshal(body, &loginForm) if err != nil { fmt.Println(err) // return 422 return } ... } 错误将打印:json.Unmarshal,这是因为r.Body是:

invalid character '-' in numeric literal

我很确定Go代码是正确的,但我无法弄清楚为什么vue-resource以这种方式发送FormData。如果有人能够在请求中显示如何发送json和其他内容,我将不胜感激

1 个答案:

答案 0 :(得分:2)

NProgress.start()
      var formData = {
        username: this.username,
        password: this.password
      }
      this.$http.post(loginURL, formData).then(response => {
        console.log(response)
      }, response => {
        console.log(response)
      })

据我所知,来自浏览器的regalr formdata对象永远不会被json编码。所以只需定义一个json对象,一切都应该没问题。