解决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 相关文章推荐
jQuery 注意事项 与原因分析
Apr 24 Javascript
Prototype Object对象 学习
Jul 12 Javascript
Javascript 模式实例 观察者模式
Oct 24 Javascript
multiSteps 基于Jquery的多步骤滑动切换插件
Jul 22 Javascript
JS 表单验证大全
Nov 23 Javascript
一些老手都不一定知道的JavaScript技巧
May 06 Javascript
JS选中checkbox后获取table内一行TD所有数据的方法
Jul 01 Javascript
实例解析jQuery插件EasyUI最常用的表单验证规则
Nov 29 Javascript
AngularJS基础 ng-mousemove 指令简单示例
Aug 02 Javascript
JavaScript之浏览器对象_动力节点Java学院整理
Jul 03 Javascript
axios全局请求参数设置,请求及返回拦截器的方法
Mar 05 Javascript
小程序根据手机机型设置自定义底部导航距离
Jun 04 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和XSL stylesheets转换XML文档
2006/10/09 PHP
php读取二进制流(C语言结构体struct数据文件)的深入解析
2013/06/13 PHP
php实现检查文章是否被百度收录
2015/01/27 PHP
xheditor与validate插件冲突的解决方案
2010/04/15 Javascript
JavaScript验证电子邮箱的函数
2014/08/22 Javascript
jQuery中:file选择器用法实例
2015/01/04 Javascript
AngularJS 表达式详细讲解及实例代码
2016/07/26 Javascript
javascript回到顶部特效
2016/07/30 Javascript
BootStrap下拉菜单和滚动监听插件实现代码
2016/09/26 Javascript
webix+springmvc session超时跳转登录页面
2016/10/30 Javascript
JavaScript常用正则函数用法示例
2017/01/23 Javascript
Vue iview-admin框架二级菜单改为三级菜单的方法
2018/07/03 Javascript
JS实现的简单分页功能示例
2018/08/23 Javascript
vue项目中使用vue-i18n报错的解决方法
2019/01/13 Javascript
vue elementUI table 自定义表头和行合并的实例代码
2019/05/22 Javascript
vue实现简单的日历效果
2020/09/24 Javascript
node.js express框架实现文件上传与下载功能实例详解
2019/10/15 Javascript
vue 开发之路由配置方法详解
2019/12/02 Javascript
原生js生成图片验证码
2020/10/11 Javascript
js实现纯前端压缩图片
2020/11/16 Javascript
解决Python requests 报错方法集锦
2017/03/19 Python
python使用MQTT给硬件传输图片的实现方法
2019/05/05 Python
Python gevent协程切换实现详解
2020/09/14 Python
css3动画事件—webkitAnimationEnd与计时器time事件
2013/01/31 HTML / CSS
Expedia泰国:预订机票、酒店和旅游包(航班+酒店)
2016/09/27 全球购物
英国袜子店:Sock Shop
2017/01/11 全球购物
艺术系大学生毕业个人自我评价
2013/09/19 职场文书
财务会计毕业生个人求职信
2014/02/03 职场文书
共产党员公开承诺践诺书
2014/05/28 职场文书
白酒代理协议书范本
2014/10/26 职场文书
四风问题自查自纠工作情况报告
2014/10/28 职场文书
财务整改报告范文
2014/11/05 职场文书
五好家庭事迹材料
2014/12/20 职场文书
python解决12306登录验证码的实现
2021/04/18 Python
基于Go语言构建RESTful API服务
2021/07/25 Golang
Python数组变形的几种实现方法
2022/05/30 Python