竹一一 2024-04-19 00:02 采纳率: 10.5%
浏览 0
已结题

关于请求数据格式问题

前端Vue向后端发送put请求时,以json数据格式能够执行成功却无法更新数据库数据,单独进行x-www-form-urlencoded格式的接口测试可以成功更新,如何单独对put请求进行请求数据格式更改?
我将axios编写成统一拦截器进行统一管理请求拦截,求Content-Type应该写在什么位置

img


还是写在put请求的函数参数

img

  • 写回答

5条回答 默认 最新

  • 码农阿豪@新空间 新星创作者: 前端开发技术领域 2024-04-19 00:02
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题解答:
    1. 如何单独对put请求进行请求数据格式更改? 对于Vue向后端发送put请求时,如果以json数据格式能够执行成功却无法更新数据库数据,可以尝试将请求的数据格式修改为x-www-form-urlencoded格式进行尝试。 可以使用axios的transformRequest对请求数据进行格式化,将json格式的数据转换为x-www-form-urlencoded格式。具体代码如下:
    import qs from 'qs';
    import axios from 'axios';
    // 对请求进行transformRequest数据格式化
    axios.interceptors.request.use(config => {
      if (config.method === 'put') {
        // 将请求数据转换为x-www-form-urlencoded格式
        config.data = qs.stringify(config.data);
        // 添加请求头
        config.headers['Content-Type'] = 'application/x-www-form-urlencoded';
      }
      return config;
    });
    export default axios;
    

    以上代码将所有的put请求的数据格式均转换为x-www-form-urlencoded格式,可以根据需要对请求头进行修改。 2. Content-Type应该写在什么位置? 对于axios的统一拦截器,建议将Content-Type写在put请求的函数参数中,这样仅对put请求进行更改,不会对其他请求造成影响。 具体代码如下:

    import qs from 'qs';
    import axios from 'axios';
    // 对请求进行transformRequest数据格式化
    axios.interceptors.request.use(config => {
      if (config.method === 'put') {
        // 将请求数据转换为x-www-form-urlencoded格式
        config.data = qs.stringify(config.data);
        // 添加请求头
        config.headers['Content-Type'] = 'application/x-www-form-urlencoded';
      }
      return config;
    });
    // put请求
    export function putRequest(url, data) {
      return axios.put(url, data, {
        headers: {
          'Content-Type': 'application/json'
        }
      });
    }
    

    以上代码对put请求进行了2次请求头设置,第一次设置为x-www-form-urlencoded格式,第二次设置为json格式。可以根据实际情况进行调整。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 4月27日
  • 已采纳回答 4月19日
  • 创建了问题 4月19日