今天有人问同一套后台系统为什么jquery可以正常使用,axios却报错呢,下面总结如下:

  总的来说是jquery和axios传参类型不同,那为什么jquery和axios请求时传参类型不同?

  1)jquery默认 form Data(如:url?a=1形式);

  因为jquery在执行post请求时,会默认设置Content-Type为application/x-www-form-urlencoded,发送的参数为form Data形式,所以服务器能够正确解析;

  2)而使用原生ajax、axios请求时,如果不显示的设置Content-Type,axios默认发送数据时,数据格式是application/json,控制台参数里显示Request Payload(即 json格式),而并非我们常用的Form Data格式。

  既然我们知道axios post方法默认使用application/json格式编码数据,那么解决方案就有两种:

  一是后台改变接收参数的方法;

  另一种则是将axios post方法的编码格式修改为application/x-www-form-urlencoded,这样就不需要后台做什么修改了。
---------------------

改变接收参数的解决办法:

  1)URLSearchParams

var params = new URLSearchParams();
params.append('key1', 'value1'); //你要传给后台的参数值 key/value
params.append('key2', 'value2');
params.append('key3', 'value3');
  bug: ie浏览器完全不兼容。
 
  2)qs  qs.stringfy(para)即可;
   但是JSON.stringify和qs.stringify虽然都是序列化,效果却不同,如下:
   1)JSON.stringify:    "{"a":"1","b":2}"
   2)qs.stringify:     a=1&b=2
    另,网上教程很多重新安装了 npm install qs --save,需要注意的是axios里已经包含qs,不用重新安装;
 
  3)In node.js, you can use the querystring module as follows:
  4)
 
 
改变header头的解决办法: headers和transformRequest配合使用;
const axiosInstance = axios.create({
  // axios实例配置
  timeout: 15000,
  method: 'post',
  headers: {
    'Content-Type''application/x-www-form-urlencoded'
  },
  transformRequest: [function(data) {
    // 请求前参数序列化
    return qs.stringify(data);
  }]
});
 
 
另附:axios参数里的params和data区别:

在使用axios时,要注意到配置选项中包含params和data两者,以为他们是相同的,实则不然。 
params用于get请求,是添加到url的请求字符串中的,即是发送请求的查询参数对象,对象中的数据会被拼接成url?param1=value1&param2=value2。。
而data是添加到请求体(body)中的, 用于post请求。
 
 

参考:

https://github.com/axios/axios/blob/master/README.md#using-applicationx-www-form-urlencoded-format

vue axios传参报错的解决方法的更多相关文章

  1. vue cnpm run dev 报错,解决方法

    执行到   $ cnpm run dev  报如下错,但是实际上 我执行   npm -v 是5.0.4 其原因是nodejs里的版本不对,解决方法

  2. Vue 项目在其他电脑 npm run dev 运行报错的解决方法

    一个 Vue 项目从一台电脑上传到 github 上之后,再另外一台电脑上 git clone .并使用 npm run dev 或 npm run start 发生以下报错的解决方法.   报错原因 ...

  3. vue项目初始化时npm run dev报错webpack-dev-server解决方法

    vue项目初始化时npm run dev报错webpack-dev-server解决方法 原因:这是新版webpack存在的BUG,卸载现有的新版本webpack,装老版本就好webpack-dev- ...

  4. vue.js 中使用(...)运算符报错的解决方法

    vue.js 中使用(...)运算符报错的解决方法 Syntax Error:Unexpected token(XX:X) }, computed:{ ...mapGetters([ 'pageSiz ...

  5. ArcGIS API for Silverlight 调用WebService出现跨域访问报错的解决方法

    原文:ArcGIS API for Silverlight 调用WebService出现跨域访问报错的解决方法 群里好几个朋友都提到过这样的问题,说他们在Silverlight中调用了WebServi ...

  6. 网站eurl.axd报错的解决方法

    网站eurl.axd报错的解决方法 错误发生的原因是当ASP.NET检测到Web站点配置为使用ASP.NET 4.0,本地ASP.NET 4.0 的组件会传递一个不能扩展的 URL到ASP.NET的管 ...

  7. MySQL中遇到的几种报错及其解决方法

    MySQL中遇到的几种报错及其解决方法 1.[Err] 1064 - You have an error in your SQL syntax; check the manual that corre ...

  8. 如何自定义JSTL标签与SpringMVC 标签的属性中套JSTL标签报错的解决方法

    如何自定义JSTL标签 1.创建一个类,从SimpleTagSupport继承 A) 通过继承可以获得当前JSP页面上的对象,如JspContext I) 实际上可以强转为PageContext II ...

  9. windows下使用GNU make命令报错的解决方法

    windows下使用GNU make命令报错的解决方法=> 错误信息:make: Interrupt/Exception caught (code = 0xc00000fd, addr = 0x ...

随机推荐

  1. 获取src 内容

    获取(代码): ].src; // 测试无效 修改(代码): 1 $("#img").attr('src',path);

  2. 35个高级Python知识点总结

    原文地址:https://blog.51cto.com/xvjunjie/2156525 No.1 一切皆对象 众所周知,Java中强调“一切皆对象”,但是Python中的面向对象比Java更加彻底, ...

  3. Net中实现HTML生成图片或PDF

    Net中实现HTML生成图片或PDF的几种方式 前段时间由于项目上的需求,要在.Net平台下实现把HTML内容生成图片或PDF文件的功能,特意在网上研究了几种方案,这里记录一下以备日后再次使用.当时想 ...

  4. 根据start和limit从已有的数据列表中获取从start开始的limit个数据

    代码记录(需求:根据start和limit从已有的数据列表中获取从start开始的limit个数据) 已有的数据列表:这个数据列表是经过处理的,可能是在SQL查询时无法处理的如多条件排序,而排序条件需 ...

  5. [转载]Oracle触发器用法实例详解

    本文实例讲述了Oracle触发器用法.分享给大家供大家参考,具体如下: 一.触发器简介 触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行. 因此触发器不需要人为的去调用,也 ...

  6. 第一周——不同java 的发展史你,注定成为不了领袖型人才

     James Gosling  1991年,James 高斯林在Sun公司的工程师小组想要设计这样一种小型计算机语言,该语言主要用于电视盒的消费类电子产品上.另外,由于不同的厂商选择不同的CPU和操作 ...

  7. Mstering QT5 chapter1

    涉及到c++ 14新特性: lambda,autovariables. A basic .pro file generally contains: 1) Qt modules used (core, ...

  8. PCL学习(四)点云转换为网格

    Remove needless points compute normals surface reconstruction get texture(param 4096 basic) save pro ...

  9. linux shell中的EOF

    关键词:EOF 在平时的运维工作中,我们经常会碰到这样一个场景:执行脚本的时候,需要往一个文件里自动输入N行内容.如果是少数的几行内容,还可以用echo追加方式,但如果是很多行,那么单纯用echo追加 ...

  10. CSP-S初赛

    初赛都过了好几天了,现在才想起来写点关于初赛的博客也真是...... 我是福建人,是在福建的赛点参加的CSP-S组的初赛,能力其实很弱,估分只能60多一点点.真是害怕一不小心这篇博客就变成了我的退役博 ...