IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 记一次使用axios设置header不生效的问题 -> 正文阅读

[JavaScript知识库]记一次使用axios设置header不生效的问题

日常开发中,后台请求接口使用post的时候有3种情况

  1. 普通的post请求,数据是以json的形式提交到后台,对应Content-type:application/json
  2. 上传文件,数据是以FormData的形式提交到后台,工具会自动处理请求头,对应Content-type:multipart/form-data
  3. 表单形式提交需要设置对应Content-type:application/x-www-form-urlencoded
Content-Type: application/json : 
请求体中的数据会以json字符串的形式发送到后端
Content-Type: application/x-www-form-urlencoded:
请求体中的数据会以普通表单形式(键值对)发送到后端
Content-Type: multipart/form-data: 
它会将请求体的数据处理为一条消息,以标签为单元,用分隔符分开。
既可以上传键值对,也可以上传文件。

项目中遇到了需要表单形式的提交,然后设置了Content-type,结果请求的时候没有生效,找了好久原因,也Google了好久都没解决,最后静下心来检查了一下代码,发现是axios封装的有问题
封装代码如下:

 // 请求拦截器
  /****** request拦截器==>对请求参数做处理 ******/
service.interceptors.request.use(config => {
  app.$vux.loading.show({
    text: '数据加载中……'
  });
 
  config.headers = {
        "Accept-Language":"en-CN;q=1.0",
        "source_type":"apple-appstore",
        "version_code":"5.4.8",
        "Content-Type":"application/json",
        "push_device_type":"4",
        "Accept": "*/*"
      }
 
  return config;
}, error => { //请求错误处理
  app.$vux.toast.show({
    type: 'warn',
    text: error
  });
  Promise.reject(error)
})

接口请求代码如下:

export function checkBlackWord(baseURL,data){
    return request.request({
        url:"/v1/Message/CheckBlackWord",
        method:"post",
        data:qs.stringify(data),
        baseURL,
        headers:{
            "Content-Type": "application/x-www-form-urlencoded"
        }
    })
}

如上造成的现象是接口请求中设置的"Content-Type": "application/x-www-form-urlencoded不生效,浏览器调试显示的依然是Content-Type":"application/json
最后定位原因是axios请求封装直接设置headers为一个新对象,这种不管接口请求中设置任何header都会被覆盖,所以修改后如下:

 // 请求拦截器
  /****** request拦截器==>对请求参数做处理 ******/
service.interceptors.request.use(config => {
  app.$vux.loading.show({
    text: '数据加载中……'
  });
 
  let headers = {
        "Accept-Language":"en-CN;q=1.0",
        "source_type":"apple-appstore",
        "version_code":"5.4.8",
        "Content-Type":"application/json",
        "push_device_type":"4",
        "Accept": "*/*"
      }
  config.headers = {...headers,...config.headers}//如果不这样写,那么在接口中设置的header都会被覆盖
  return config;
}, error => { //请求错误处理
  app.$vux.toast.show({
    type: 'warn',
    text: error
  });
  Promise.reject(error)
})

利用对象的解构赋值语法,合并接口的配置和统一的配置

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-02-19 01:03:52  更:2022-02-19 01:06:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:27:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码