今天發(fā)現(xiàn)我同一個(gè)接口,用不同的賬號(hào)去請(qǐng)求的時(shí)候,會(huì)出現(xiàn)數(shù)據(jù)類(lèi)型不一樣的情況,導(dǎo)致前端js報(bào)錯(cuò)
-
正常情況下,沒(méi)有使用走到unset的情況,請(qǐng)求接口數(shù)據(jù)返回是這樣的
image.png
users:[{},{},{},{}....{}]
我們發(fā)現(xiàn)在users的類(lèi)型是數(shù)組,最外層用數(shù)組包裹著。
-
使用另一個(gè)賬號(hào)登錄,請(qǐng)求同一個(gè)接口,這次有走進(jìn)代碼的unset,返回的數(shù)據(jù)突然就變成對(duì)象,也就是用{}包裹的
image.png
很明顯發(fā)現(xiàn)users是這樣一個(gè)格式,最外層使用的是{}包裹,而且仔細(xì)看,每個(gè){}里的元素有顯示他的下標(biāo),并且是不連貫的(通過(guò)unset函數(shù))
users:{0:{},1:{},3:{},.....8:{}}
這樣返回的數(shù)據(jù),很顯然在同一個(gè)頁(yè)面,前端是沒(méi)辦法處理的,所以報(bào)了這樣的錯(cuò)誤,前端也不知道什么原因
我到php調(diào)試代碼,發(fā)現(xiàn),只要有走進(jìn)unset的那一次請(qǐng)求,全部會(huì)出現(xiàn),users的從數(shù)據(jù)轉(zhuǎn)成對(duì)象的情況。
[{},{},{}] => {0:{},1:{},3:{}}
查了官方文檔才知道,php unset
對(duì)json_encode()
的影響 ,因?yàn)槲以趓eturn 到前端的時(shí)候,還是用了laravel自帶的response()->json([])
這個(gè)方法,也是相當(dāng)于json_encode()
。
解決辦法:
我使用 array_values()
函數(shù)重置了被unset操作過(guò)的數(shù)組下標(biāo),使它變成連貫的數(shù)組,這樣再json_encode
就不會(huì)出現(xiàn)數(shù)據(jù)類(lèi)型轉(zhuǎn)換的情況了
注:因?yàn)槲业膗sers數(shù)組里的下表都是索引下表,所以我使用這個(gè)函數(shù)對(duì)我的數(shù)據(jù)沒(méi)有影響
原因:json_encode()
對(duì)非連貫的數(shù)組,或者非索引下表的數(shù)組,轉(zhuǎn)化之后會(huì)變成{} 包裹的格式,因?yàn)槭褂昧藆nset,把原先索引下標(biāo)按順序的數(shù)組改變了,變成不連貫數(shù)組,所以會(huì)變成{}包裹的數(shù)據(jù)格式。
原因的參考文章鏈接:https://www.cnblogs.com/saysmy/p/9957734.html