因为之前一直用表单默认的处理方式,不能返回值,这次的项目需要在页面将表单提交后的结果进行显示,但是本人对前端的其他功能不是特别熟练,所以尝试了ajax提交表单。
表单如下
<form class="inpform" id="uploadForm" method="post" enctype="multipart/form-data" >
<div class="clear">
<div class="zcwtitle fl">参数设置</div>
<div class="fr"><img src="<%=basePath%>assets/images/reload.png" width="21" height="21" onClick="myrefresh()" class="hand"></div>
<div id="mssg" class="twoliea01 clear">网关参数<input type="text" name="mssg" value="http://lctest.isignet.cn:13001"></div>
<div id="mssg" class="twoliea01 clear">应用参数<input type="text" name="appId" value="67f6c99b74484c2b8bcb35473850cdd7"></div><br>
<div id="mssg" class="twoliea01 clear">用户msspId<input type="text" id="msspid" name="msspid" value="" ></div><br>
<div class="zcwtitle fl">印章图片上传</div>
<%-- <div class="fr"><img src="<%=basePath%>assets/images/reload.png" width="21" height="21" onClick="myrefresh()" class="hand"></div> --%>
<div class="clearkit"></div>
<div id="mssipdcss" class="twoliea01 clear">上传图片</div>
<div class="clear uploadfile"><input type="file" id="tbsFile" name="tbsFile" class="ifile" οnchange="licChange();">
<div class="scleft01">浏 览</div>
<div class="scright01 "><input type="text" id="fileinput" οnclick="fileclick()" /></div>
</div>
<div class="clearkit"></div>
<div class="clear zcbutton"><input type="submit" value="提交" class="zc_btn zcon" οnclick="return check();"></div>
</div>
</form>
在ajax中对表单进行提交:
function login() {
var formData = new FormData($("#uploadForm")[0]);//构建表单数据
$.ajax({
//几个参数需要注意一下
type: "POST",//方法类型
dataType: "json",//预期服务器返回的数据类型
url: $_serverurl+"changeSeal" ,//url
data: formData,
processData:false, //必须false才会避开jQuery对 formdata 的默认处理
contentType : false,//必须为false才能自动加上正确的contentType
success: function (result) {
if (result.erroCode == "0") {
alert("SUCCESS");
}else if(result.erroCode == "-1"){
alert("fail");
};
},
error : function() {
alert("异常!");
}
});
}
一开始没有加上processData,后端接收不到ajax请求,而没有加上contentType,后端收到请求,但是拿不到正确的值
后端对formData数据的接收如下:
@RequestMapping(value="changeSeal",method = RequestMethod.POST)
public @ResponseBody UserResult updateSeal (@RequestParam(value = "tbsFile", required = false)MultipartFile file,
String appId, String mssg,String msspid,HttpServletRequest request){
通过@RequestParam来接收数据,在谷歌浏览器的抓包过程中发现,上送参数的请求头中的contentType为
multipart/form-data,spring在处理请求参数的时候,如果是json参数,则可以通过@RequestBody来进行处理,将json转化为对象,而如果是表单数据,则需要@RequestParam进行处理