問題描述:在和后端對接時,使用jquery的ajax的post方式向后端傳遞一序列約定好格式的對象數組。遇到了一個現象:如果對象中的數組是空數組,那么在請求參數中是不會出現的。
以下是數據的對比:
jQuery - ajax - post - 數據 | 接口請求參數中無法找到daily及daily_group |
![]() |
![]() |
有人會問:為啥要提交一個空數組上去呢?因為有時會有這樣的需求啊,比如說后端接口兼容等等。
我遇到這個問題是:由於編輯時改了數據導致為空數組,保存時沒有傳遞相關數據;結果再次編輯時,數據還在。原因是后端沒有獲取到新的數據,就沒有更改數據。
解決問題:
方法一:將請求的json對象格式化為字符串,就可以發送空數組了。但是缺點是,在看請求參數時是一堆字符串,不便於閱讀;並且后端php在接受數據后,還需要json_encode()格式化處理。
方法二:前端不改,前后端約定,當獲取不到參數時,就將對應參數的值設置為空數組。個人認為這個可取。
問題本質:為什么ajax post上傳之后,空數組會被過濾掉呢?原因就在於jquery的ajax方法中的這段代碼:
以下是測試代碼:
那么是不是可以:把ajax方法里面processData設置為false之后,再去序列化一下參數呢?
然而實踐結果雖然能上傳過去,但是名稱卻變成了[object Object]