解决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 相关文章推荐
利用js获取服务器时间的两个简单方法
Jan 08 Javascript
jquery创建并行对象或者合并对象的实现代码
Oct 10 Javascript
form表单中去掉默认的enter键提交并绑定js方法实现代码
Apr 01 Javascript
jquery animate实现鼠标放上去显示离开隐藏效果
Jul 21 Javascript
使用GruntJS构建Web程序之安装篇
Jun 04 Javascript
jQuery中outerHeight()方法用法实例
Jan 19 Javascript
jquery mobile 移动web(5)
Dec 20 Javascript
javascript如何实现360度全景照片问题汇总
Apr 04 Javascript
bootstrap输入框组件使用方法详解
Jan 19 Javascript
Koa项目搭建过程详细记录
Apr 12 Javascript
微信小程序实现上传word、txt、Excel、PPT等文件功能
May 23 Javascript
JavaScript实现网页下拉菜单效果
Nov 20 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设计模式 Delegation(委托模式)
2011/06/26 PHP
PHP在网页中动态生成PDF文件详细教程
2014/07/05 PHP
PHP微信开发之查询城市天气
2016/06/23 PHP
PHP自定义函数实现格式化秒的方法
2016/09/14 PHP
PHP 的Opcache加速的使用方法
2017/12/29 PHP
解决IE6的PNG透明JS插件使用介绍
2013/04/17 Javascript
Js控制弹窗实现在任意分辨率下居中显示
2013/08/01 Javascript
javascript的tab切换原理与效果实现方法
2015/01/10 Javascript
阻止表单提交按钮多次提交的完美解决方法
2016/05/16 Javascript
C#微信小程序服务端获取用户解密信息实例代码
2017/03/10 Javascript
Vue中的Vux配置指南
2017/12/08 Javascript
JavaScript时间日期操作实例小结【5个示例】
2018/12/22 Javascript
JS实现将对象转化为数组的方法分析
2019/01/21 Javascript
vue 列表页跳转详情页获取id以及详情页通过id获取数据
2019/03/27 Javascript
ES6入门教程之变量的解构赋值详解
2019/04/13 Javascript
elementui之el-tebs浏览器卡死的问题和使用报错未注册问题
2019/07/06 Javascript
Webpack 4如何动态切割JS注入文件名详解
2019/07/09 Javascript
详解vue3.0 diff算法的使用(超详细)
2020/07/01 Javascript
[04:10]DOTA2英雄梦之声_第11期_圣堂刺客
2014/06/21 DOTA
跟老齐学Python之有容乃大的list(3)
2014/09/15 Python
Python实现方便使用的级联进度信息实例
2015/05/05 Python
Python函数可变参数定义及其参数传递方式实例详解
2015/05/25 Python
python中reader的next用法
2018/07/24 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
2019/01/30 Python
python中append实例用法总结
2019/07/30 Python
Python:合并两个numpy矩阵的实现
2019/12/02 Python
Python基于Dlib的人脸识别系统的实现
2020/02/26 Python
python 在右键菜单中加入复制目标文件的有效存放路径(单斜杠或者双反斜杠)
2020/04/08 Python
英国最大的网上药品商店:Chemist Direct
2017/12/16 全球购物
Bowflex美国官方网站:高级家庭健身器材
2017/12/22 全球购物
乌克兰时尚鞋子和衣服购物网站:Born2be
2018/05/24 全球购物
护理专业毕业生自荐信范文
2014/01/05 职场文书
党员干部公开承诺书
2014/03/26 职场文书
单位在职证明书
2014/09/11 职场文书
公司聚餐通知
2015/04/22 职场文书
销售合作意向书范本
2015/05/08 职场文书