前端XMLHttpRequest 发送请求 FormData后台接收不到数据,request.getParameter(),获取数据为null

        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");

查看请求的访问头部

如下

前端XMLHttpRequest 发送请求 FormData后台接收不到数据,request.getParameter(),获取数据为null_第1张图片

发现数据请求格式和正常的httlp请求不一样,所以收不到数据。这就涉及到tomcat解析http请求格式的知识,这里不做深入,只讲讲解怎么收到数据。需要引入两个jar包就好,必须两个同时引用。


	
	    commons-fileupload
	    commons-fileupload
	    1.2.1
	
	
	
	
	    commons-io
	    commons-io
	    2.4
	

 这样就行了,具体原理的话,我查的资料是,主要是服务器解析请求头部根据

Content-Type: multipart/form-data;

的不同,而解析方式不同,我们需要自己处理接受http发送过来的数据,不过apache已经为我们封装好了方法,就在引用的jar包中,(突然感觉世界没号了很多),之后我们就可以获取数据了。我们普通的请求头部类型为

Content-Type: application/x-www-form-urlencoded; 

差点忘了一点,这是运用springMVC上传文件用的,所以需要在spring中注册bean,重点啊,不然那两个jar包就没用处了

  
        
          
            10485760  
          
        
        
            UTF-8
        
    

参考地址:https://www.cnblogs.com/WJ-163/p/6269409.html

你可能感兴趣的:(前端XMLHttpRequest 发送请求 FormData后台接收不到数据,request.getParameter(),获取数据为null)