解决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 图片轮播(5张图片)
Dec 30 Javascript
JavaScript 常见对象类创建代码与优缺点分析
Dec 07 Javascript
基于jquery完美拖拽,可返回拖动轨迹
Mar 29 Javascript
JavaScript Scoping and Hoisting 翻译
Jul 03 Javascript
jQuery带箭头提示框tooltips插件集锦
Nov 17 Javascript
js流动式效果显示当前系统时间
May 16 Javascript
浅析JavaScript回调函数应用
May 22 Javascript
判断输入的字符串是否是日期格式的简单方法
Jul 11 Javascript
BootStrap Validator对于隐藏域验证和程序赋值即时验证的问题浅析
Dec 01 Javascript
bootstrap实现每隔5秒自动轮播效果
Dec 20 Javascript
Vue刷新修改页面中数据的方法
Sep 16 Javascript
JavaScript中的ES6 Proxy的具体使用
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与javascript对多项选择的处理
2006/10/09 PHP
isset和empty的区别
2007/01/15 PHP
php采集速度探究总结(原创)
2008/04/18 PHP
php preg_match_all结合str_replace替换内容中所有img
2008/10/11 PHP
laravel在中间件内生成参数并且传递到控制器中的2种姿势
2019/10/15 PHP
JavaScript DOM 添加事件
2009/02/14 Javascript
Js 获取HTML DOM节点元素的方法小结
2009/04/24 Javascript
Jquery乱码的一次解决过程 图解教程
2010/02/20 Javascript
js中的json对象详细介绍
2014/10/29 Javascript
ExpressJS入门实例
2015/01/14 Javascript
jQuery自定义添加"$"与解决"$"冲突的方法
2015/01/19 Javascript
jQuery解析XML与传统JavaScript方法的差别实例分析
2015/03/05 Javascript
jQuery+slidereveal实现的面板滑动侧边展出效果
2015/03/14 Javascript
解析Javascript单例模式概念与实例
2016/12/05 Javascript
微信小程序仿RadioGroup改变样式的处理方案
2018/07/13 Javascript
Vue.js实现表格渲染的方法
2018/09/07 Javascript
运用js实现图层拖拽的功能
2019/05/24 Javascript
vue项目或网页上实现文字转换成语音播放功能
2020/06/09 Javascript
教你用Type Hint提高Python程序开发效率
2016/08/08 Python
Python基于list的append和pop方法实现堆栈与队列功能示例
2017/07/24 Python
Pycharm取消py脚本中SQL识别的方法
2018/11/29 Python
python生成带有表格的图片实例
2019/02/03 Python
Python二进制文件读取并转换为浮点数详解
2019/06/25 Python
python提取xml里面的链接源码详解
2019/10/15 Python
python网络编程之五子棋游戏
2020/05/14 Python
CSS3的Border-radius轻松制作圆角
2012/12/24 HTML / CSS
socket.io 和canvas 实现的共享画板功能
2019/05/22 HTML / CSS
做一个能自适应高度的textarea的示例代码
2019/09/06 HTML / CSS
经典大学生求职信范文
2014/01/06 职场文书
入党申请自荐书范文
2014/02/11 职场文书
物流专业专科生职业生涯规划书
2014/09/14 职场文书
小学生禁毒教育心得体会
2016/01/15 职场文书
CSS实现多个元素在盒子内两端对齐效果
2021/03/30 HTML / CSS
解决golang 关于全局变量的坑
2021/05/06 Golang
JavaScript小技巧带你提升你的代码技能
2021/09/15 Javascript
MySQL Innodb索引机制详细介绍
2021/11/23 MySQL