今天有人问同一套后台系统为什么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. Nginx在线服务状态下平滑升级或新增模块

    nginx在使用过程中,有时需要在不影响当前业务的情况下,进行升级或新增模块.nginx的升级有两种方法:1.半自动化升级:2.手动升级 不过都需要先查看安装的nginx版本和配置信息,然后前往官网下 ...

  2. (十七)super关键字(转)

    --本文摘自孤傲苍狼博客. 一.super关键字

  3. ansible软件部署

    每一个软件或集群都创建一个单独的角色. mkdir -pv ansible/roles/{jdk,hadoop,spark}/{tasks,files,templates,meta,handlers, ...

  4. Swift学习 (四)

    5.枚举与结构体: 不必给枚举成员提供一个值.如果我们想要为枚举成员提供一个值(raw value),我们可以用字符串,字符,整型或浮点数类型. 1 2 3 4 5 6 7 enum CompassP ...

  5. celery的log如何传递给django,由django管理

    celery自己管理log目录 celery worker --autoscale=4,1 --app=erebus.celeryapp:app -l info -f /home/admin/outp ...

  6. Ocelot+Consul 集群搭建实践

    博客园已经有很多大神写过consul集群搭建了.大家都在玩,那我也不能托后退呢 不过自己研究下还是好的.毕竟每个人遇到的问题的不同 研究过才能说自己玩过consul,文章有部分名词解释是收集网络 Co ...

  7. 字符串匹配算法---BF

    Brute-Force算法,简称BF算法,是一种简单朴素的模式匹配算法,常用语在一个主串string 内查找一个子串 pattern的出现位置. 核心思想: i 遍历主串string i 每自增一次, ...

  8. 阿里云ecs自动创建快照教程

    最近在一个博客联盟的微信群里面看到经常有朋友问阿里云的ecs服务器怎么设置自动创建快照,也不知道最近是怎么了,看到问这个问题的朋友有有四五个左右了,今天就特意到博客里来费大家分享设置自动创建快照的方法 ...

  9. MySQL的注入总结

    0x01 MySQL 5.0以上和MySQL 5.0以下版本的区别 MySQL5.0以上版本存在一个叫information_schema的数据库,它存储着数据库的所有信息,其中保存着关于MySQL服 ...

  10. nginx 为什么受欢迎?

    优势:1.高并发 2.可扩展性 3.高可靠性 4.热部署 5.BSD许可证 如何做到以上优势呢?高并发:异步io非阻塞,占用更少资源,支持更多连接可扩展:模块化设计,第三方模块多高可靠:核心框架代码的 ...