vue js中的axios将请求发送为字符串,而不是对象

时间:2020-01-26 20:27:41

标签: javascript php vue.js axios

我该如何解决此问题? 这是main.js 我想通过Vue.js中的axios将名称发送到服务器 但是我无法从$ _Request获取名字

import Vue from 'vue'
import App from './App.vue'
import axios from 'axios'

Vue.config.productionTip = false
Vue.prototype.$http = axios

new Vue({
  render: h => h(App),
}).$mount('#app')

这是我的模板脚本

export default {

  data() {
    return {
    header:{headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
    }},
      name:null,
      r:null,
    }

  },
  methods: {
    post:function(){
      this.$http.post('http://127.0.0.1/saver.php',{
          name:this.name,
        },this.header).then(r => {
       this.r=r;
       // eslint-disable-next-line no-console
       console.log(typeof {name:this.name})
      }).catch(err => {
   // eslint-disable-next-line no-console
   console.log(err.response.data)
});
    }
  },
}
</script>

这是我的php服务器端代码:

<?php
header('Access-Control-Allow-Origin: *');
header('Content-Type: application/json');
if ($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_REQUEST))
{

    print_r($_REQUEST);
}
?>

params:

params

这是从服务器返回的响应:

response server

1 个答案:

答案 0 :(得分:1)

Axios documentation所述,

默认情况下,axios将JavaScript对象序列化为JSON。发送数据 改为使用application / x-www-form-urlencoded格式,您可以使用 以下选项之一。

<...>

在浏览器中,您可以使用URLSearchParams API

<...>

或者,您可以使用qs库对数据进行编码

应该是:

this.$http.post('http://127.0.0.1/saver.php', qs.stringify({
  name:this.name,
}),this.header)

或者,可以将服务器端修改为仅使用JSON有效负载。