vue axios解决post传参数问题
我相信遇到這個問題的兄弟們,不帶參數的情況下都是沒有問題吧,
如果有問題,百度吧,好解決,答案都比較靠譜
這里主要針對帶參數的情況,坑多
另外,我默認你用postman帶參測試接口是沒問題的
不多說,直接上實例供參考吧,1、2可以跳過
?
1、安裝axios
npm install axios --save
2、添加axios組件
import Axios from 'axios'
Axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
axios.defaults.baseURL = 'http://localhost:7878/zkview';
Vue.prototype.$ajax = axios
3、如何解決?這里采取的是URLSearchParams的方式,因為不想導入qs模塊(qs其實也是類似這個方式,解決問題的核心就是把參數轉換成標準的鍵值對)
問題是解決了,下面是我了解到的原因,有興趣的可以繼續往下看
1、有的兄弟會遇到前端header就沒有看到axios準備post到后臺接口的參數(我就是這種情況)
2、有的兄弟會遇到前端header能看到參數,但是后臺沒有接收到參數
那么,為什么會導致這兩種情況呢?
數據變成了類json進行傳輸而且數據請求的方式也發生了變化,上面變成了Request Payload
這個時候數據不是標準的鍵值對,無法解析成類似get傳參方式 ?userid=zhonghangAlex&password=woaini123 這樣的字段
我們如果使用這樣的后臺數據獲取方式(如下Python代碼),就會發生異常,其它后端語言同理。
//Python示例 我們如果使用這樣的后臺數據獲取方式,就會發生異常req_userid = request.POST.get('userid') req_password = request.POST.get('password')?
那么應該如何處理呢?
?
前端解決
使用URLSearchParams傳遞參數是大多數網友的做法,如下核心代碼示例
import axios = import('axios') let param = new URLSearchParams() param.append("userid", "zhonghangAlex") param.append("password", "woaini123")axios.post('xxxxx', param).then(.....)果然我們傳遞的參數就正常了,后臺可以獲取到相應的鍵值對,但是使用這樣的方法有兩點壞處,第一個是前端請求每一個字段都append會很麻煩,第二個就是這個對象它不兼容IE和Edge甚至在360瀏覽器都會掛掉,我曾經嘗試過IE11版本都不行,提示這個對象缺失。所以我們最好的辦法就是在后端做一個處理!
后端解決
????? 經過查閱大量的資料,我發現,正如我前面說過的,get請求發送的是很標準的鍵值對,數據可以被后端解析,那為什么后端不能解析json格式的post數據呢?按照這個思路我研究了下request的api,發現這個json是封裝到body中的,所以,在后端的調用應該使用body對象。
這就是后端處理的辦法,核心的代碼是:
//python 核心代碼示例 req = json.loads(request.body) req_userid = req['userid'] req_password = req['password']這樣req_userid和req_password就分別存儲了前端發來的數據。
前端使用node的時候也是一樣的,post請求的數據會封裝到request的body中,所以不管你采用什么樣的語言寫后臺,這個問題總是可以在后臺解決的。
?
今日贈語:
“靜”中藏著一個“爭”字,越爭心越要靜
“穩”中藏著一個“急”字,越急心越要穩
“忙”中藏著一個“亡”字,越忙越要照顧好自己
“忍”中藏著一個“刀”字,越忍越要看清事態
?
總結
以上是生活随笔為你收集整理的vue axios解决post传参数问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WebStorm 破解教程
- 下一篇: vue获取浏览器地址栏参数(?及/)路由