解决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 15 Javascript
Extjs中常用表单介绍与应用
Jun 07 Javascript
javascript模拟地球旋转效果代码实例
Dec 02 Javascript
JavaScript设计模式之观察者模式(发布者-订阅者模式)
Sep 24 Javascript
使用jQuery实现input数值增量和减量的方法
Jan 24 Javascript
AngularJs中Bootstrap3 datetimepicker使用实例
Dec 13 Javascript
vue实现tab切换外加样式切换方法
Mar 16 Javascript
vue-router3.0版本中 router.push 不能刷新页面的问题
May 10 Javascript
微信小程序引用iconfont图标的方法
Oct 22 Javascript
详解微信小程序用定时器实现倒计时效果
Apr 30 Javascript
关于JS解构的5种有趣用法
Sep 05 Javascript
Vue中component标签解决项目组件化操作
Sep 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实现用户在线时间统计详解
2011/10/08 PHP
Laravel 5框架学习之数据库迁移(Migrations)
2015/04/08 PHP
精解window.setTimeout()&window.setInterval()使用方式与参数传递问题!
2007/11/23 Javascript
javascript让setInteval里的函数参数中的this指向特定的对象
2010/01/31 Javascript
锋利的jQuery 第三章章节总结的例子
2010/03/23 Javascript
基于jquery的$.ajax async使用
2011/10/19 Javascript
php图像生成函数之间的区别分析
2012/12/06 Javascript
js中符号转意问题示例探讨
2013/08/19 Javascript
js控制frameSet示例
2013/09/10 Javascript
javascript面向对象程序设计(一)
2015/01/29 Javascript
Javascript核心读书有感之语言核心
2015/02/01 Javascript
jquery使用ul模拟select实现表单美化的方法
2015/08/18 Javascript
jQuery满屏焦点图左右滚动特效代码分享
2015/09/07 Javascript
详解node如何让一个端口同时支持https与http
2017/07/04 Javascript
nodejs操作mongodb的填删改查模块的制作及引入实例
2018/01/02 NodeJs
JS求Number类型数组中最大元素方法
2018/04/08 Javascript
React diff算法的实现示例
2018/04/20 Javascript
JS实现的缓冲运动效果示例
2018/04/30 Javascript
JavaScript实现的DOM绘制柱状图效果示例
2018/08/08 Javascript
浅谈Angular 观察者模式理解
2018/11/01 Javascript
nodejs实现用户登录路由功能
2019/05/22 NodeJs
解决Can't find variable: SockJS vue项目的问题
2020/09/22 Javascript
聊聊vue 中的v-on参数问题
2021/01/29 Vue.js
[01:14]2014DOTA2展望TI 剑指西雅图newbee战队专访
2014/06/30 DOTA
使用PYTHON解析Wireshark的PCAP文件方法
2019/07/23 Python
python提取照片坐标信息的实例代码
2019/08/14 Python
Python爬虫:Request Payload和Form Data的简单区别说明
2020/04/30 Python
Pycharm中安装wordcloud等库失败问题及终端通过pip安装的Python库如何添加到Pycharm解释器中(推荐)
2020/05/10 Python
elf彩妆英国官网:e.l.f. Cosmetics英国(美国平价彩妆品牌)
2017/11/02 全球购物
Guess美国官网:美国知名服装品牌
2019/04/08 全球购物
研发工程师岗位职责
2014/04/28 职场文书
小学生个人先进事迹材料
2014/05/08 职场文书
珍惜资源的建议书
2014/08/26 职场文书
大学生档案自我鉴定(2篇)
2014/10/14 职场文书
疾病证明书
2015/06/19 职场文书
Tomcat安装使用及部署Web项目的3种方法汇总
2022/08/14 Servers