解决axios会发送两次请求,有个OPTIONS请求的问题


Posted in Javascript onOctober 25, 2018

问题描述:

Vue的开发者都知道axios,很多都用axios来进行数据交互,axios的默认请求头是Content-Type: application/json

使用这个请求头会出现向服务器请求两次的情况

为什么呢?

原因是:浏览器会首先使用 OPTIONS 方法发起一个预请求,判断接口是否能够正常通讯,如果不能就不会发送真正的请求过来,如果测试通讯正常,则开始真正的请求。

大概意思就是:

浏览器对后台说:我可以请求你吗? ( ̄ˇ ̄) 
后台说:阔以。( ̄? ̄)~*
结果是:发送原有的GET(POST)请求
后台说:不阔以。(??′)
结果是:报错

那么这样每个请求都会发送两次,无形加重了服务器的负担(如果服务器特厉害就当我没说),网上有的解决办法是让后台允许options请求,但是并不返回任何数据,那么就不会报错,可是这样治标不治本,浏览器还是来撩后台了,只是后台不让撩而已。

如何解决这个问题?不允许浏览器请求,只发送真正的请求,我也没解决,如果有已经解决的朋友可以告诉我解决方法~( ̄3 ̄)~

但.......

我有可以替代的方法

那就是在main.js中,设置axios的默认请求头axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded';

可是问题又来了

解决axios会发送两次请求,有个OPTIONS请求的问题

后台不认这个数据格式啊...

所以在传递的时候必须先把数据转换格式

这时候我们需要用到qs模块

npm install qs

在main.js中

引入qs模块

import qs from 'qs

然后弄qs原型

Vue.prototype.$qs = qs

这样我们就可以在axios post请求的时候将我们传递的数据转换成后台认识的格式

this.$axios
   .post("http://xxx/", 
    this.$qs.stringify(postData)
   ).then(data => {
    if (data.data.status != 200) {
     //xxx
    } else {
     //xxx
    }
   });

总结

以上所述是小编给大家介绍的解决axios会发送两次请求,有个OPTIONS请求的问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
使用Jquery搭建最佳用户体验的登录页面之记住密码自动登录功能(含后台代码)
Jul 10 Javascript
在浏览器中获取当前执行的脚本文件名的代码
Jul 19 Javascript
JavaScript prototype属性深入介绍
Nov 27 Javascript
Node.js中调用mysql存储过程示例
Dec 20 Javascript
EasyUI布局 高度自适应
Jun 04 Javascript
jQuery插件实现图片轮播特效
Jun 16 Javascript
JavaScript6 let 新语法优势介绍
Jul 15 Javascript
微信小程序实现多宫格抽奖活动
Apr 15 Javascript
微信小程序三级联动选择器使用方法
May 19 Javascript
理理Vue细节(推荐)
Apr 16 Javascript
layui使用templet格式化表格数据的方法
Sep 16 Javascript
微信小程序scroll-view不能左右滑动问题的解决方法
Jul 09 Javascript
在Vue中使用axios请求拦截的实现方法
Oct 25 #Javascript
webpack4+react多页面架构的实现
Oct 25 #Javascript
浅谈让你的代码更简短,更整洁,更易读的ES6小技巧
Oct 25 #Javascript
代码整洁之道(重构)
Oct 25 #Javascript
Vue使用NPM方式搭建项目
Oct 25 #Javascript
小程序云开发实战小结
Oct 25 #Javascript
vue使用原生js实现滚动页面跟踪导航高亮的示例代码
Oct 25 #Javascript
You might like
Ajax+PHP 边学边练之四 表单
2009/11/27 PHP
PHP 转义使用详解
2013/07/15 PHP
codeigniter使用技巧批量插入数据实例方法分享
2013/12/31 PHP
ThinkPHP模板判断输出Empty标签用法详解
2014/06/30 PHP
php防止CC攻击代码 php防止网页频繁刷新
2015/12/21 PHP
javascript 全角转换实现代码
2009/07/17 Javascript
网页打开自动最大化的js代码
2012/08/22 Javascript
ajax不执行success回调而是执行了error回调
2012/12/10 Javascript
JavaScript中的方法调用详细介绍
2014/12/30 Javascript
深入浅析javascript立即执行函数
2015/10/23 Javascript
原生js实现jquery函数animate()动画效果的简单实例
2016/08/21 Javascript
BootStrap table使用方法分析
2016/11/08 Javascript
JavaScript常见的五种数组去重的方式
2016/12/15 Javascript
Bootstrap表格制作代码
2017/03/17 Javascript
Vue中的v-cloak使用解读
2017/03/27 Javascript
Vue学习笔记进阶篇之多元素及多组件过渡
2017/07/19 Javascript
JScript实现表格的简单操作
2017/08/15 Javascript
VueJs 将接口用webpack代理到本地的方法
2017/11/27 Javascript
vue权限管理系统的实现代码
2019/01/17 Javascript
Layui多选只有最后一个值的解决方法
2019/09/02 Javascript
24行JavaScript代码实现Redux的方法实例
2019/11/17 Javascript
[38:41]2014 DOTA2国际邀请赛中国区预选赛 LGD VS CNB
2014/05/22 DOTA
使用Django启动命令行及执行脚本的方法
2018/05/29 Python
Python网页正文转换语音文件的操作方法
2018/12/09 Python
wxPython修改文本框颜色过程解析
2020/02/14 Python
Python如何使用正则表达式爬取京东商品信息
2020/06/01 Python
pandas抽取行列数据的几种方法
2020/12/13 Python
男方父母证婚词
2014/01/12 职场文书
建筑个人求职信范文
2014/01/25 职场文书
销售人员职业生涯规划范文
2014/03/01 职场文书
2014年入党积极分子党课学习心得体会模板
2014/04/03 职场文书
敬老院标语
2014/06/27 职场文书
2014年法院个人工作总结
2014/12/17 职场文书
服务承诺书
2015/01/19 职场文书
2015暑期社会实践个人总结
2015/07/13 职场文书
三十年再续同学情倡议书
2019/11/27 职场文书