ajax提交post請求出現數組被截斷情況的解決方法


一、場景

php post 提交數據時傳的數據時數組,沒有多數據進行序列化處理。發現傳到服務端時,部分數據丟失,查詢了資料發現php對參數個數有限制,限制在php配置文件中(max_input_vars)。

同樣,java中也有類型的配置,不過,配置是在tomcat上邊,修改方式為:<Connector connectionTimeout="20000" maxParameterCount="-1" maxPostSize="0" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>,通過配置maxParameterCount數據來取消限制。

 

二、解決過程

經過調試發現前端頁面提交post請求時數據量是正確的,但到服務端只能接受到1000條左右(可能是算法問題,導致不值精准的1000條)。

一開始以為是post請求長度超過限制,不過測試了其他的接口,發現Content-Length比有問題的接口數據量還大都沒有問題,唯一不同的就是參數個數不在一個數量級上。

於是懷疑是不是參數個數限制置導致的,於是將數組序列化后傳遞到后台,果然就解決了這該問題。后來百度了下果不其然發現max_input_vars這個配置項,該配置項是在php 5.3.9版本之后才加入的,目的是為了防止hash沖突。

既然如此那就改下該配置項,默認是1000,改成10000,或者更高。然而前端傳的數據量是不確定的,就算把max_input_vars設置成10萬,也有可能不夠用。

 

三、最終解決方法

1、前端將數組轉換成json傳輸,即JSON.stringify(goodsList)

2、服務端接收到並解析$goodsList = json_decode($_POST['goodsList'], true);

3、測試發現前端傳過來的數據服務端都能獲取到,問題圓滿解決

 

參考:https://www.cnblogs.com/orzlin/p/5985445.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM