解决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 相关文章推荐
Prototype使用指南之enumerable.js
Jan 10 Javascript
js css后面所带参数含义介绍
Aug 18 Javascript
Js的Array数组对象详解
Feb 22 Javascript
深入理解JS中的substr和substring
Apr 26 Javascript
KnockoutJS 3.X API 第四章之事件event绑定
Oct 10 Javascript
KnockoutJS 3.X API 第四章之表单textInput、hasFocus、checked绑定
Oct 11 Javascript
详解jQuery的表单验证插件--Validation
Dec 21 Javascript
JavaScript实现数组降维详解
Jan 05 Javascript
JS验证不重复验证码
Feb 10 Javascript
利用jQuery解析获取JSON数据
Apr 08 jQuery
jquery animate动画持续运动的实例
Nov 29 jQuery
vue使用keep-alive实现组件切换时保存原组件数据方法
Oct 30 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 fputcsv命令 写csv文件遇到的小问题(多维数组连接符)
2011/05/24 PHP
ThinkPHP访问不存在的模块跳转到404页面的方法
2014/06/19 PHP
php实现生成验证码实例分享
2016/04/10 PHP
100多行PHP代码实现socks5代理服务器[2]
2016/05/05 PHP
Smarty简单生成表单元素的方法示例
2016/05/23 PHP
php app支付宝回调(异步通知)详解
2018/07/25 PHP
JQUERY复选框CHECKBOX全选,取消全选
2008/08/30 Javascript
基于JQuery的一句话搞定手风琴菜单
2012/09/14 Javascript
一个不错的js html页面倒计时可精确到秒
2014/10/22 Javascript
jquery实现触发时更新下拉列表内容的方法
2015/12/02 Javascript
基于jquery实现即时检查格式是否正确的表单
2016/05/06 Javascript
JavaScript利用闭包实现模块化
2017/01/13 Javascript
Angular4 中常用的指令入门总结
2017/06/12 Javascript
bootstrap基本配置_动力节点Java学院整理
2017/07/14 Javascript
微信小程序基于slider组件动态修改标签透明度的方法示例
2017/12/04 Javascript
微信小程序rich-text富文本用法实例分析
2019/05/20 Javascript
Vue在chrome44偶现点击子元素事件无法冒泡的解决方法
2019/12/15 Javascript
讲解python参数和作用域的使用
2013/11/01 Python
理解Python垃圾回收机制
2016/02/12 Python
django2.0扩展用户字段示例
2019/02/13 Python
Django项目中使用JWT的实现代码
2019/11/04 Python
python 轮询执行某函数的2种方式
2020/05/03 Python
Python实现自动签到脚本的示例代码
2020/08/19 Python
15个应该掌握的Jupyter Notebook使用技巧(小结)
2020/09/23 Python
python regex库实例用法总结
2021/01/03 Python
Html5 postMessage实现跨域消息传递
2016/03/11 HTML / CSS
汉森批发:Hansen Wholesale
2018/05/24 全球购物
同步和异步有何异同,在什么情况下分别使用他们?
2012/12/28 面试题
学校食堂食品安全责任书
2014/07/28 职场文书
校本研修个人总结
2015/02/28 职场文书
2015年上半年物业工作总结
2015/03/30 职场文书
推广普通话的宣传语
2015/07/13 职场文书
护士业务学习心得体会
2016/01/25 职场文书
某学校的2019年度工作报告范本
2019/10/11 职场文书
OpenCV绘制圆端矩形的示例代码
2021/08/30 Python