解决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 相关文章推荐
[原创]图片分页查看
Aug 28 Javascript
自定义的一个简单时尚js下拉选择框
Nov 20 Javascript
JavaScript函数内部属性和函数方法实例详解
Mar 17 Javascript
Javascript之Math对象详解
Jun 07 Javascript
RequireJS 依赖关系的实例(推荐)
Jan 21 Javascript
基于js中document.cookie全面解析
Sep 14 Javascript
Node使用Sequlize连接Mysql报错:Access denied for user ‘xxx’@‘localhost’
Jan 03 Javascript
使用Angular CLI生成 Angular 5项目教程详解
Mar 18 Javascript
jQuery阻止事件冒泡实例分析
Jul 03 jQuery
jQuery实现基本隐藏与显示效果的方法详解
Sep 05 jQuery
详解Node.js中path模块的resolve()和join()方法的区别
Oct 29 Javascript
JS实现根据数组对象的某一属性排序操作示例
Jan 14 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操作mysql数据库的基本类代码
2014/02/25 PHP
PHP实现的随机IP函数【国内IP段】
2016/07/20 PHP
PHP二维数组去重算法
2016/12/17 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
jQuery动态添加的元素绑定事件处理函数代码
2011/08/02 Javascript
解决IE6的PNG透明JS插件使用介绍
2013/04/17 Javascript
通过JavaScript使Div居中并随网页大小改变而改变
2013/06/24 Javascript
jquery动态加载select下拉框示例代码
2013/12/10 Javascript
javascript和jquery实现设置和移除文本框默认值效果代码
2015/01/13 Javascript
使用AOP改善javascript代码
2015/05/01 Javascript
基于JavaScript实现定时跳转到指定页面
2016/01/01 Javascript
聊一聊JS中this的指向问题
2016/06/17 Javascript
Angular 常用指令实例总结整理
2016/12/13 Javascript
easyui-edatagrid.js实现回车键结束编辑功能的实例
2017/04/12 Javascript
使用原生js+canvas实现模拟心电图的实例
2017/09/20 Javascript
详解解决Vue相同路由参数不同不会刷新的问题
2018/10/12 Javascript
js操作两个json数组合并、去重,以及删除某一项元素
2020/09/22 Javascript
vue浏览器返回监听的具体步骤
2021/02/03 Vue.js
Python之pandas读写文件乱码的解决方法
2018/04/20 Python
解决python报错MemoryError的问题
2018/06/26 Python
Python实现正则表达式匹配任意的邮箱方法
2018/12/20 Python
解决python3.5 正常安装 却不能直接使用Tkinter包的问题
2019/02/22 Python
python实现Excel文件转换为TXT文件
2019/04/28 Python
python利用itertools生成密码字典并多线程撞库破解rar密码
2019/08/12 Python
用Python画一个LinkinPark的logo代码实例
2019/09/10 Python
迪卡侬荷兰官网:Decathlon荷兰
2017/10/29 全球购物
会计专业应届生自荐信
2014/02/07 职场文书
运动会获奖感言
2014/02/11 职场文书
政府信息公开实施方案
2014/05/09 职场文书
植树节标语
2014/06/27 职场文书
妇联领导班子剖析材料
2014/08/21 职场文书
户外活动总结
2015/02/04 职场文书
本溪关门山导游词
2015/02/09 职场文书
土建施工员岗位职责
2015/04/11 职场文书
职场新人刚入职工作总结该怎么写?
2019/05/15 职场文书