排查Vue 使用POST请求方式给TP接口传参失败问题


在进行前后端分析开发的时候,前端使用的是element-admin框架进行开发,后台使用的是TP5框架,不管哪个版本TP都无法接收Vue项目POST传过来的参数。然而使用工具(postman)那些都能让后台成功接收POST过来的参数,唯独Vue不行,刚开始以为是没有解决跨域问题,但是前端设置代理之后并且后台也设置了跨域,GET请求方式的传参就能让后台成功获取到参数。排除跨域的原因。当使用POST请求传参时,数据明明已经提交了,在打开F12开发工具的时候,点击network里面的确有数据已经传过去,只是后台那里,打印日志确实没有获取到传来的参数。网上找了不少资料,然后进行一一排查,自己是什么原因导致问题的出现。网上基本上说是数据格式问题

我是在element-admin项目中进行了一系列的尝试

尝试过程:

1. 提交的数据形式变为:FormData

测试例子使用的是element-admin项目

安装qs插件,项目根目录执行命令:

npm install qs -S

2. 设置全局变量

在main.js中设置全局标量$axios等,此操作是便于可以在所有Vue文件中使用axios插件。

import axios from 'axios' 
import qs from 'qs'
Vue.prototype.$qs = qs;
Vue.prototype.$axios = axios;

3. 然后在请求方法中使用

我这里直接使用使用axios,看看我这个问题是不是数据格式不对引起的。后端接口URL为:http://192.168.3.167:86/admin/Storeproduct/CateEdit,在表单页面中定义编辑数据方法updateData,然后在方法中直接使用axios请求后台接口。方法如下所示:

updateData() {
    
    
     let data = {
    
    
          id: 1,
          cate_name: 'hengbenyinhe',
          sort: this.temp.sort,
     }
     this.$axios.post('http://192.168.3.167:86/admin/Storeproduct/CateEdit',qs.stringify(data)).then((resp) => {
    
    
            console.log('111',resp)
          })
      },

调用updateData方法则对后台请求成功。

问题原因

主要原因是发送的数据格式不对。Vue的axios传参方式是requestpayload,参数格式是json,而通过payload形式的数据php $_post无法接受前端提交的数据,要想后端接受post提交的数据,就要进行参数设置,提交的数据形式变为:Form Data。PPOS表单请求提交时,使用的Content-Type是application/x-www-form-urlencoded,而使用原生AJAX的POST请求如果不指定请求头RequestHeader,默认使用的Content-Type是text/plain;charset=UTF-8,Content-Type是:

Content-Type: application/json; charset=utf-8
Date: Tue, 27 Oct 2020 05:38:27 GMT

既然找到了原因,就可以有解决方法。

解决方式

将传递的json数据转为form data

1.安装qs
终端执行

npm  install qs -S

2.使用qs.stringify将数据转为form data

以上为我自己问题的解决办法,其他具体问题还需要具体分析。

猜你喜欢

转载自blog.csdn.net/qq_23257451/article/details/109313751