当时项目为了解决这个问题自闭了一个下午.....上网找了不少的文章看,几乎都没有根治方法,可是最后仍是被我搞定了
[]~( ̄▽ ̄)~* ios
Vue的开发者都知道axios,不少都用axios来进行数据交互,axios的默认请求头是Content-Type: application/json
使用这个请求头会出现向服务器请求两次的状况
为何呢?npm
缘由是:浏览器会首先使用 OPTIONS 方法发起一个预请求,判断接口是否可以正常通信,若是不能就不会发送真正的请求过来,若是测试通信正常,则开始真正的请求。json
大概意思就是:
浏览器对后台说:我能够请求你吗? ( ̄ˇ ̄)
后台说:阔以。( ̄▽ ̄)~*
结果是:发送原有的POST请求
后台说:不阔以。(‵﹏′)
结果是:报错axios
那么这样每一个请求都会发送两次,无形加剧了服务器的负担(若是服务器特厉害就当我没说),网上有的解决办法是让后台容许options请求,可是并不返回任何数据,那么就不会报错,但是这样治标不治本,浏览器仍是来撩后台了,只是后台不让撩而已。
如何解决这个问题?不容许浏览器请求,只发送真正的请求,我也没解决,若是有已经解决的朋友能够告诉我解决方法
~( ̄3 ̄)~浏览器
我有能够替代的方法
那就是在main.js中,设置axios的默认请求头axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded';服务器
后台不认这个数据格式啊...app
因此在传递的时候必须先把数据转换格式post
这时候咱们须要用到qs模块
先 npm install qs测试
引入qs模块this
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 } });
这样就完美解决问题,减小了对服务器的请求,减轻了对服务器的压力,最重要的是可!以!传!