解决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 相关文章推荐
可实现多表单提交的javascript函数
Aug 01 Javascript
javascript 实用的文字链提示框效果
Jun 30 Javascript
extjs grid设置某列背景颜色和字体颜色的实现方法
Sep 06 Javascript
禁止拷贝网页内容的js代码
Jan 22 Javascript
Javascript中的Array数组对象详谈
Mar 03 Javascript
AngularJS自定义服务与fliter的混合使用
Nov 24 Javascript
前端框架学习总结之Angular、React与Vue的比较详解
Mar 14 Javascript
js封装成插件的步骤方法
Sep 11 Javascript
详解ES6 Promise对象then方法链式调用
Oct 20 Javascript
JavaScript中的一些实用小技巧总结
Apr 07 Javascript
微信小程序开发之map地图组件定位并手动修改位置偏差
Aug 17 Javascript
正则表达式基础与常用验证表达式
Jun 16 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
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
Nigma vs Alliance BO5 第四场2.14
2021/03/10 DOTA
js实现的真正的iframe高度自适应(兼容IE,FF,Opera)
2010/03/07 Javascript
JavaScript解析URL参数示例代码
2013/08/12 Javascript
JS+flash实现chrome和ie浏览器下同时可以复制粘贴
2013/09/22 Javascript
写得不错的jquery table鼠标经过变色代码
2013/09/27 Javascript
javascript 原型链维护和继承详解
2014/11/26 Javascript
高性能JavaScript模板引擎实现原理详解
2015/02/05 Javascript
超详细的javascript数组方法汇总
2015/11/21 Javascript
基于javascript实现九九乘法表
2016/03/27 Javascript
JS组件系列之Bootstrap table表格组件神器【终结篇】
2016/05/10 Javascript
jQuery实现判断滚动条滚动到document底部的方法分析
2019/08/27 jQuery
详解从vue-loader源码分析CSS Scoped的实现
2019/09/23 Javascript
微信小程序多列表渲染数据开关互不影响的实现
2020/06/05 Javascript
vue-router 控制路由权限的实现
2020/09/24 Javascript
[05:02][DOTA2]DOTA进化论 第一期
2013/09/27 DOTA
python处理图片之PIL模块简单使用方法
2015/05/11 Python
python实现下载整个ftp目录的方法
2017/01/17 Python
python使用suds调用webservice接口的方法
2019/01/03 Python
python绘制已知点的坐标的直线实例
2019/07/04 Python
在自动化中用python实现键盘操作的方法详解
2019/07/19 Python
python实现比对美团接口返回数据和本地mongo数据是否一致示例
2019/08/09 Python
python开发实例之Python的Twisted框架中Deferred对象的详细用法与实例
2020/03/19 Python
使用keras实现densenet和Xception的模型融合
2020/05/23 Python
英国网上香水店:Fragrance Direct
2016/07/20 全球购物
SmartBuyGlasses美国官网:太阳眼镜和眼镜
2017/08/20 全球购物
Zadig&Voltaire官网:法国时装品牌
2018/01/05 全球购物
台湾母婴用品限时团购:妈咪爱
2018/08/03 全球购物
TripAdvisor台湾:全球最大旅游网站
2018/08/26 全球购物
River Island美国官网:英国高街时尚品牌
2018/09/04 全球购物
Otticanet美国:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/03/10 全球购物
康拓普公司Java笔面试
2016/09/23 面试题
怎样写好自我评价呢?
2014/02/16 职场文书
股票投资建议书
2014/05/19 职场文书
Java基础-封装和继承
2021/07/02 Java/Android
2021年国产动漫公司排行前十名,玄机科技上榜,第二推出过铠甲勇士
2022/03/18 杂记