使用ajax提交form表单,包括ajax文件上传
使用ajax提交form表单,包括ajax文件上传
http://www.cnblogs.com/zhuxiaojie/p/4783939.html
前言使用ajax请求数据,很多人都会,比如说: $.post(path,{data:data},function(data){ ... },"json"); 又或者是这样的ajax $.ajax({ url:"${pageContext.request.contextPath}/public/testupload",type:"post",data:{username:username}, success:function(data){ window.clearInterval(timer); console.log("over.."); },error:function(e){ alert("错误!!"); window.clearInterval(timer); } }); 同样的,很多人也会。但是写的越多就越会发现,这样子虽然可以避免刷新页面,但是我们要写大量的js来到得数据: var username = $("#username").val(); var password = $("#password").val(); ... 如果数量少的话,那还没有什么,但是如果数据十分大的话,那就十分的麻烦,那有没有什么简单的方法呢?答案肯定有的!下面介绍两种方法,可以极大的提高开发人员的效率。 方法方法一:使用FormData对象FormData对象是html5的一个对象,目前的一些主流的浏览器都已经兼容。额,如果你说ie8什么的,那我们还是来谈谈今天的天气吧,我没听见。呵呵,开个玩笑,不支持FormData的,可以使用方法二,下面会介绍。接着说FormData,它是一个html5的javascript对象,非常的强大。 FormData可以凭空创建一个对象,然后往这个对象里面添加数据,然后直接提交,不需要写一行html代码,如下: var form = new FormData(); form.append("username","zxj"); form.append("password",123456); var req = new XMLHttpRequest(); req.open("post","${pageContext.request.contextPath}/public/testupload",255); line-height:1.5!important">false); req.send(form); 这样就可以向浏览器发送表单数据了,或者也可以使用Jquery这样发送: new FormData(); form.append("username","zxj"); form.append("password",123456); $.ajax({ url:"${pageContext.request.contextPath}/public/testupload",data:form,processData:false,contentType:function(data){ window.clearInterval(timer); console.log("over.."); } }); 这样也可以直接发送数据到后台。 你以为这就完了?不!这才刚开始呢!! 其次FormData还支持直接从html中的表单生成数据,就是在html页面中已经有数据了,然后FormData可以直接把这个表单的数据写入这个对象,然后直接提交给后台 代码如下,先给出html代码: <form id="tf">
<input type="file" name="img"/>
<input type="text" name="username"/>
<input type="button" value="提" onclick="test();"/>
.............
</form>
大家注意到没有,里面可是有文件的哦! 没错,FormData还支持困扰众多开发者已久的ajax的上传文件,以前我们上传文件,需要写一个表单直接刷新提交,但是这里不需要,下面给出提交代码: function test(){ new FormData(document.getElementById("tf")); // var req = new XMLHttpRequest(); // req.open("post",false); req.send(form); $.ajax({ url:"${pageContext.request.contextPath}/public/testupload",255); line-height:1.5!important">function(e){ alert("错误!!"); window.clearInterval(timer); } }); get();此处为上传文件的进度条 } 就是这么简单,使用FormData,在构造这个对象的时候,把表单的对象,作为一个参数放进去,就可以了,然后FormData,就会得到这个表单对象里面的所有的参数,甚至我们在表单中,都不需要声明enctype ="multipart/form-data" ,就可以直接提交。 使用FormData,第一是在提交表单的时候,不需要写大量的js来获得表单数据,直接把表单对象构造就行了。第二就是可以直接异步上传文件,简单牛逼爆了! 注意:使用FormData提交的时候,大家会注意到表单提交的是request payload,具体有兴趣的同学可以自己百度,它不是之前的Form data提交的,所以后台也是要经过处理的,比如springMVC就需要配置 <!-- 配置nultipartresolver,注意:id名必须这样写,不然会报错 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
property name="defaultEncoding" value="UTF-8"></property="maxInMemorySize"="10240000">
</bean>
不然会接收不到数据,当然,后台的话,我们这里就先不管。 方法二:使用jquery.form.jsJquery.form.js是一个强大的表单插件,其大量的提供了表单操作的各种简便的方法,下面给出一些Jquery.form.js的说明:
Options对象 ajaxForm和ajaxSubmit都支持众多的选项参数,这些选项参数可以使用一个Options对象来提供。
那么现在来说一些它的主要用法吧! 它也支持对一个表单的ajax提交,而且提交方式更为简便,如下: html: form ="tf">
input type="file" name="img"/>
="text"="username"="button"="提" onclick="test();"/>
form>
下面使用jquery.form.js的表单插件来提交表单 $("#tf").ajaxSubmit(); 额,就是这么简单,你也不要问我为什么就是这么简单,然后它就是会把整个表单,作为一个ajax来提交,同样的,它也支持文件上传!一些其它的用法,请参照前面给出的说明就可以了! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |