zoukankan      html  css  js  c++  java
  • axios的get请求无法设置Content-Type

    最近在与后端的项目对接中,接口工具使用了axios这个东西。怎么说那 ,反正有很多坑,在后端的请求中要设置GET 请求中要设置header中的Content-Typeapplication/json; charset=utf-8

    我目视了两秒钟很简单的嘛

    var $http  = axios.create({
      baseURL: url,
      headers: {
        'Content-Type': 'application/json; charset=utf-8'
      }
      ...
    })
    

      

    洒洒水啦 ,是不是很容易

    然后。。然后。。我艹what fuck,一看请求中header中没得这个玩意儿,但是除了Content-Type都是可以设置的

    此时此刻一万句mmp要将,百度一大推也都没啥用

    然后本人就去读了一哈源码,npm包中的源码 axios/lib/xhr.js,写了什么,我艹 他写了什么

    118------129行

        // Add headers to the request
        if ('setRequestHeader' in request) {
          utils.forEach(requestHeaders, function setRequestHeader(val, key) {
            if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {
              // Remove Content-Type if data is undefined
              delete requestHeaders[key];
            } else {
              // Otherwise add header to the request
              request.setRequestHeader(key, val);
            }
          });
        }
    

      

    然后看这个if判段, 哔了狗了

    然后就有那么几个解决办法,下面我写一写哈

    • 方法一
    //修改这段代码
        // Add headers to the request
        if ('setRequestHeader' in request) {
          utils.forEach(requestHeaders, function setRequestHeader(val, key) {
            //if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {
              // Remove Content-Type if data is undefined
              //delete requestHeaders[key];
            //} else {
              // Otherwise add header to the request
              request.setRequestHeader(key, val);
            //}
          });
        }
    

      

    好了,行了行了,现在可以了
    

      

    • 方法二 
      我们不能随随便便改人家的npm包啊,万一下次别人安装的时候那不是又要去改,咋办呢,看下面这个方法 
    var $http
    // 添加一个新的axios实例
    $http = axios.create({
      baseURL: url,
      headers: {
        'Content-Type': 'application/json; charset=utf-8'
      }
    })
    // 添加请求拦截器
    $http.interceptors.request.use(function (config) {
      // 在发送请求之前做些什么
      // 随便写个值 绕过if判段
      if (config.method == 'get') {
        config.data = true
      }
      config.headers['H-TOKEN'] = '111'
      return config;
    }, function (error) {
      // 对请求错误做些什么
      return Promise.reject(error);
    });
    

      

    现在哥哥告诉你,随便在get请求中设置header那还不是简简单单的事情
    

      

    axios这么做的原因, 是因为GET请求本身是不需要Content-type,塔属于简单请求

    原文作者:echone_wenqian

    原文地址:https://blog.csdn.net/qq_24729895/article/details/80367460

  • 相关阅读:
    HDU 3081 Marriage Match II
    HDU 4292 Food
    HDU 4322 Candy
    HDU 4183 Pahom on Water
    POJ 1966 Cable TV Network
    HDU 3605 Escape
    HDU 3338 Kakuro Extension
    HDU 3572 Task Schedule
    HDU 3998 Sequence
    Burning Midnight Oil
  • 原文地址:https://www.cnblogs.com/gxsyj/p/10697593.html
Copyright © 2011-2022 走看看