解决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 相关文章推荐
关于Blog顶部的滚动导航条代码
Sep 25 Javascript
javascript获取选中的文本的方法代码
Oct 30 Javascript
js清除input中type等于file的值域(示例代码)
Dec 24 Javascript
JS 仿腾讯发表微博的效果代码
Dec 25 Javascript
一个通过script自定义属性传递配置参数的方法
Sep 15 Javascript
利用AJAX实现WordPress中的文章列表及评论的分页功能
May 17 Javascript
jQuery的Each比JS原生for循环性能慢很多的原因
Jul 05 Javascript
jQuery弹出下拉列表插件(实现kindeditor的@功能)
Aug 16 Javascript
浅谈React Native 中组件的生命周期
Sep 08 Javascript
JS与CSS3实现图片响应鼠标移动放大效果示例
May 04 Javascript
详解VSCode配置启动Vue项目
May 14 Javascript
在Vue中使用Echarts实例图的方法实例
Oct 10 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
第二节--PHP5 的对象模型
2006/11/16 PHP
PHP中全局变量global和$GLOBALS[]的区别分析
2012/08/06 PHP
基于PHP编程注意事项的小结
2013/04/27 PHP
PHP中使用php5-ffmpeg撷取视频图片实例
2015/01/07 PHP
搭建基于Docker的PHP开发环境的详细教程
2015/07/01 PHP
php获取flash尺寸详细数据的方法
2016/11/12 PHP
jquery中对表单的基本操作代码
2010/07/29 Javascript
JQuery扩展插件Validate—4设置错误提示的样式
2011/09/05 Javascript
JS中获取数据库中的值的方法
2013/07/14 Javascript
jquery的map与get方法详解
2013/11/04 Javascript
深入理解Javascript中this的作用域
2014/08/12 Javascript
JS表格组件神器bootstrap table详解(强化版)
2016/05/26 Javascript
url中的特殊符号有什么含义(推荐)
2016/06/17 Javascript
浅谈jquery中next与siblings的区别
2016/10/27 Javascript
Html5 js实现手风琴效果
2020/04/17 Javascript
web.js.字符串与正则表达式操作
2017/05/13 Javascript
mint-ui在vue中的使用示例
2018/04/05 Javascript
使用vue-cli4.0快速搭建一个项目的方法步骤
2019/12/04 Javascript
JavaScript碰撞检测原理及其实现代码
2020/03/12 Javascript
Javascript查看大图功能代码实现
2020/05/07 Javascript
vue 实现基础组件的自动化全局注册
2020/12/25 Vue.js
浅析Python中的getattr(),setattr(),delattr(),hasattr()
2016/06/14 Python
Django学习笔记之Class-Based-View
2017/02/15 Python
python实现简单聊天应用 python群聊和点对点均实现
2017/09/14 Python
python中Switch/Case实现的示例代码
2017/11/09 Python
将字典转换为DataFrame并进行频次统计的方法
2018/04/08 Python
pytest中文文档之编写断言
2019/09/12 Python
在Python中等距取出一个数组其中n个数的实现方式
2019/11/27 Python
opencv设置采集视频分辨率方式
2019/12/10 Python
python序列类型种类详解
2020/02/26 Python
Python经纬度坐标转换为距离及角度的实现
2020/11/01 Python
西北政法大学自主招生自荐信
2014/01/29 职场文书
调解协议书
2014/04/16 职场文书
2014年四风问题自我剖析材料
2014/09/15 职场文书
深入开展党的群众路线教育实践活动心得体会
2014/11/05 职场文书
六一儿童节园长致辞
2015/07/31 职场文书