解决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 相关文章推荐
线路分流自动跳转代码;希望对大家有用!
Dec 02 Javascript
短信提示使用 特效
Jan 19 Javascript
js操作二级联动实现代码
Jul 27 Javascript
用javascript模仿ie的自动完成类似自动完成功的表单
Dec 12 Javascript
js弹出窗口之弹出层的小例子
Jun 17 Javascript
详解js中构造流程图的核心技术JsPlumb
Dec 08 Javascript
本地Bootstrap文件字体图标引入却无法显示问题的解决方法
Apr 18 Javascript
原生js实现倒计时--2018
Feb 21 Javascript
Vue实现购物车功能
Apr 27 Javascript
React操作真实DOM实现动态吸底部的示例
Oct 23 Javascript
基于js中的存储键值对以及注意事项介绍
Mar 30 Javascript
JS代码检查工具ESLint介绍与使用方法
Feb 04 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接口中interface存在的意义
2013/06/27 PHP
Jquery Ajax学习实例4 向WebService发出请求,返回实体对象的异步调用
2010/03/16 Javascript
jQuery使用动态渲染表单功能完成ajax文件下载
2013/01/15 Javascript
通用javascript代码判断版本号是否在版本范围之间
2015/11/29 Javascript
Javascript 数组去重的方法(四种)详解及实例代码
2016/11/24 Javascript
axios学习教程全攻略
2017/03/26 Javascript
JS实现微信里判断页面是否被分享成功的方法
2017/06/06 Javascript
详解AngularJS用Interceptors来统一处理HTTP请求和响应
2017/06/08 Javascript
Node 自动化部署的方法
2017/10/17 Javascript
浅谈Vue.js 组件中的v-on绑定自定义事件理解
2017/11/17 Javascript
AngularJS中ng-options实现下拉列表的数据绑定方法
2018/08/13 Javascript
JavaScript ES6常用基础知识总结
2019/02/09 Javascript
Vue使用Canvas绘制图片、矩形、线条、文字,下载图片
2019/04/26 Javascript
微信小程序之滑动页面隐藏和显示组件功能的实现代码
2020/06/19 Javascript
js绘制一条直线并旋转45度
2020/08/21 Javascript
详解如何在vue+element-ui的项目中封装dialog组件
2020/12/11 Vue.js
JavaScript canvas实现雨滴特效
2021/01/10 Javascript
[36:16]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.19
2020/12/24 DOTA
python3中dict(字典)的使用方法示例
2017/03/22 Python
python入门教程 python入门神图一张
2018/03/05 Python
Python+pandas计算数据相关系数的实例
2018/07/03 Python
深入浅析Python传值与传址
2018/07/10 Python
python实现dijkstra最短路由算法
2019/01/17 Python
Python实现合并excel表格的方法分析
2019/04/13 Python
python 扩展print打印文件路径和当前时间信息的实例代码
2019/10/11 Python
浅谈Django2.0 加xadmin踩的坑
2019/11/15 Python
python  ceiling divide 除法向上取整(或小数向上取整)的实例
2019/12/27 Python
canvas离屏技术与放大镜实现代码示例
2018/08/31 HTML / CSS
全球速卖通俄罗斯站:AliExpress俄罗斯
2019/06/17 全球购物
LUISAVIAROMA德国官网:时尚奢侈品牌购物网站
2020/11/12 全球购物
技术支持岗位职责
2015/02/13 职场文书
2015毕业寄语大全
2015/02/26 职场文书
毕业设计论文致谢词
2015/05/14 职场文书
CSS3 制作精美的定价表
2021/04/06 HTML / CSS
logback如何自定义日志存储
2021/08/30 Java/Android
详解Go语言中配置文件使用与日志配置
2022/06/01 Golang