當時項目爲了解決這個問題自閉了一個下午.....上網找了不少的文章看,幾乎都沒有根治方法,可是最後仍是被我搞定了
[]~( ̄▽ ̄)~* 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 } });
這樣就完美解決問題,減小了對服務器的請求,減輕了對服務器的壓力,最重要的是可!以!傳!