用axios post form symfony访问vue js数据

Posted

技术标签:

【中文标题】用axios post form symfony访问vue js数据【英文标题】:Access vue js data with axios post form symfony 【发布时间】:2019-05-12 09:20:50 【问题描述】:

您好,我正在尝试通过 axios 从 symfony 后端访问 vue.js 数据数组。这是我的代码。

var vm = new Vue(
                el: '#el',
                delimiters: ["[[", "]]"],
                data: 
                    brand: 0,
                    model: 0,
                    country: "europe",
                ,
                created: function () 
                ,
                updated: function () 
                    axios.post('http://localhost:81/lnt/public/member/car_result', data: this.data)
                            .then(function (response) 

                            );
                
            );

这是我的 symfony 代码,

/**
 * @Route("/car_result", name="car_result", methods="POST")
 */
public function carResult(Request $request) 
    $data = $request->getContent();
    $data = json_decode($data, true);

    $brand = $data['brand'];
    .......

但不幸的是,我得到的是没有名为品牌的索引 :(。如果有人能在这方面帮助我,那就太好了。认为我需要找到一种方法将完整的数据数组发送到后端 我可以这样发送数据,

axios.post('http://localhost:81/lnt/public/member/car_result', brand: this.brand)

【问题讨论】:

您正在尝试获取数据,但您发送的是发布请求,而不是获取请求。如果您只返回一个字符串会怎样 - 您可以 console.log 这个响应吗? console.log(this.data);我这样做了,得到了未定义的输出 【参考方案1】:

把axios代码写成

 axios.post('http://localhost:81/lnt/public/member/car_result', this.data)
                            .then(function (response) 

【讨论】:

真的很抱歉兄弟,但我仍然是 null :( 尝试使用邮递员获取数据。这将告诉你你的代码是否工作【参考方案2】:

这段代码有两个问题。

1 this.data 未定义

您的数据如下:

data: this.data

你可能希望有结构


    data: 
        brand: 0,
        model: 0,
        country: "europe",
    

但是由于this.data 不是Vue 实例的数据属性,所以它不起作用。它看起来很神奇,但是调用 this['property'] 是在向 Vue 询问 data 的反应属性的值,所以如果你想得到 brand 你应该输入 this.brand

2 你的数据模型在客户端和服务器上是不同的

如果json 的这种结构将在您询问的 Symfony 控制器中实现,则事件

$brand = json_decode($request->getContent(), true)['brand'];

但实际上,您的请求在第一级没有“品牌”键。你应该用

替换你的后端代码
$brand = json_decode($request->getContent(), true)['data']['brand'];

或将您的客户端代码粘贴请求正文替换为

brand: this.brand

【讨论】:

以上是关于用axios post form symfony访问vue js数据的主要内容,如果未能解决你的问题,请参考以下文章

Vueaxios post提交请求转为form data

axios的post传参时,将参数转为form表单格式

使用axios发送post请求,将JSON数据改为为form类型

使用axios发送post请求,将JSON数据改为为form类型

使用 symfony2 从 post Multipart (Content-Disposition: form-data) 获取数据

vue中使用axios处理post方法导出excel表格(后端返回文件流)