問題:在Vue中用axios的默認請求頭是Content-Type: application/json,發起請求時,axios會發送兩次,一次爲options 類型。
原因:瀏覽器會首先使用 OPTIONS 方法發起一個預請求,判斷接口是否能夠正常通訊,如果不能就不會發送真正的請求過來,如果測試通訊正常,則開始真正的請求。
解決:設置axios的默認請求頭axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded';
但後臺不認這個數據格式,需轉換數據格式,用到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
}
});