基于SpringMVC与jquery的ajax提交表单的若干情况详解
在日常的业务中,我们往往使用的是ajax提交页面数据,而不用form的action来提交整个表单。现在我来分享一下我在日常工作中遇到的一些问题。
一、$.post、$.get、$.ajax三者的区别:
顾名思义,$.post和$.get分别是采用post方式和get方式向服务器发送请求。两者的不同是,get请求的参数是在url直接以url?name1=value1&name2=value2的形式拼接而成,而post请求的参数会以请求正文的形式传送到服务器,这个学习过javaweb知识的应该都知道,在此也不赘述。
在这里主要想讲的是关于同异步发送请求的。$.post和$.get默认是采用异步的形式向服务器发送请求,但我们的需求中很多情况需要得到服务器的返回值来判断下一步的操作,这个时候就需要用到$.ajax了。
var flag=false; $.ajax({ type: "get", url: "xxxxxx", async:false, data: {username:name, password:pwd}, dataType: "json", success: function(data){ if(data>0){ flag=true; } } });
如以上代码,type来设置请求方式,async则设置的是同步或者异步,默认为true异步的,此时设置为false。如果用通常的$.post和$.get的话,flag的值是不会随着返回值data的值发生改变的。
二、文件上传
ajax上传文件一直都是一个比较头疼的问题,在这里我用的是jquery的一个扩展框架,jquery.form.js,此包提供了一个$ajaxSubmit方法,很好的解决了springmvc下文件上传的问题,当然,form表单的method为post,type为multipart/form-data,示例代码如下:
$(#id).ajaxSubmit({ type: 'post', url: 'xxxxxx', data: { uername: name, content: content }, success: function(data) { //回调函数 } });
此时,表单数据和文件数据会保存在request中传入服务器。后台获取代码如下:
MutlipartHttpServletRequest multipart =(MutlipartHttpServletRequest )request; //把request转为上传文件专用的request Map<String,String[]> dataMap = request.getParameterMap(); //获取普通表单数的<name,value>键值对 Map<String,Multipart> fileMap = request.getFileMap(); //获取上传文件的键值对,当未上传文件时,这个键值对会以普通数据存在于dataMap中而不是fieMap中
暂时这么多把,想起来了再加。