在開發過程中遇到乙個前端通過axios向後端api請求,引數傳遞格式不正確導致的請求失敗的問題,在此記錄一下。
後端是乙個查詢介面,查詢引數中有幾個是陣列的形式:
傳送請求時應該以params是通過url方式傳遞:
//預期格式pageno=1&pagesize=15&sn=123&sn=456&mo_number=6767&mo_number=8787
但是在除錯過程中發現,在實際的傳參時,陣列的格式是這個樣子的:
//實際格式pageno=1&pagesize=15&sn=123&sn=456&mo_number=6767&mo_number=8787
與後端需要的引數格式不符,導致請求失敗。
通過網上查詢資料,發現是axios的params引數在序列化時的格式設定不正確導致的。在axios的配置項中發現有paramsserializer方法可以對params進行序列化:
// `paramsserializer` 是乙個負責 `params` 序列化的函式 // (e.g. paramsserializer: function(params) ) },
預設的陣列序列化的格式為:brackets(方括號),也就是上文**現的sn=123&sn=456形式。qs.stringify對於陣列有三種序列化方式,分別為:
qs.stringify(, ) //形式:ids[0]=1&aids1]=2&ids[2]=3qs.stringify(, ) //形式:ids=1&ids=2&ids=3qs.stringify(, ) //形式:ids=1&ids=2&id=3
我們需要的是第三種也就是repeat的方式,或者設定indices屬性為false
qs.stringify(, ) //形式:ids=1&ids=2&id=3
修改後請求成功。
axios處理陣列傳參
但有一種post情況不是用表單提交的,後端希望接收的引數與表單提交的格式保持一致,這時就需要前端對引數做序列化處理了,這裡常用的是qs處理 安裝qs npm install qs s後端要求的陣列引數為以下格式 前端的原始引數 let params params qs.stringify param...
指標陣列陣列傳參 指標引用傳參
指標和陣列作為引數傳入函式時,傳入的是位址,即指向變數的位址和陣列的首位址,可以在函式中改變指標或陣列的值,但本質上它們還是值的傳遞 區別於變數的值傳遞的是 變數值傳遞不會改變實參原來的值。我們無法對指標和陣列的位址進行操作 如 位址賦值,分配記憶體等 要進行位址操作需要使用指標引用或指標的指標。示...
C C 陣列傳參
託管c 可以將陣列作為輸入 輸出引數。clr封裝c 託管介面時,可以使用cli array 作為輸入引數,而且c 可以獲取到c 修改後的陣列內容。array陣列原型 qualifiers cli array qualifiers type dimension var 我們只關注下模板引數 type ...