前端XMLHttpRequest 傳送請求 FormData後臺接收不到資料,request.getParameter(),獲取資料為null
阿新 • • 發佈:2018-12-15
var form = new FormData(); form.append("fName",$("#fName").val()); form.append("fPrice",$("#fPrice").val()); form.append("fType",$("#fType").val()); form.append("fDescription",$("#fDescription").val()); form.append("files",files[0]); var xmlhttp; if (window.XMLHttpRequest){ // IE7+, Firefox, Chrome, Opera, Safari 瀏覽器執行程式碼 xmlhttp=new XMLHttpRequest(); } else{ // IE6, IE5 瀏覽器執行程式碼 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function(){ if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("myDiv").innerHTML=xmlhttp.responseText; } } xmlhttp.open("POST",url,true); xmlhttp.send(form);
這個程式碼,後端一直收不到資料,String fName=request.getParameter("fName");
檢視請求的訪問頭部
如下
發現數據請求格式和正常的httlp請求不一樣,所以收不到資料。這就涉及到tomcat解析http請求格式的知識,這裡不做深入,只講講解怎麼收到資料。需要引入兩個jar包就好,必須兩個同時引用。
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.2.1</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-io/commons-io --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency>
這樣就行了,具體原理的話,我查的資料是,主要是伺服器解析請求頭部根據
Content-Type: multipart/form-data;
的不同,而解析方式不同,我們需要自己處理接受http傳送過來的資料,不過apache已經為我們封裝好了方法,就在引用的jar包中,(突然感覺世界沒號了很多),之後我們就可以獲取資料了。我們普通的請求頭部型別為
Content-Type: application/x-www-form-urlencoded;
差點忘了一點,這是運用springMVC上傳檔案用的,所以需要在spring中註冊bean,重點啊,不然那兩個jar包就沒用處了
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 上傳檔案大小上限,單位為位元組(10MB) -->
<property name="maxUploadSize">
<value>10485760</value>
</property>
<!-- 請求的編碼格式,必須和jSP的pageEncoding屬性一致,以便正確讀取表單的內容,預設為ISO-8859-1 -->
<property name="defaultEncoding">
<value>UTF-8</value>
</property>
</bean>