FormData,ajaxForm 均可实现文件上传

 

一:使用FormData对象

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

          req.send(form);

这样就可以向浏览器发送表单数据了,或者也可以使用Jquery这样发送:

 var form =new FormData();

  form.append("username","zxj");

  form.append("password",123456);

 $.ajax({

                url:"${pageContext.request.contextPath}/public/testupload",

                type:"post",

                data:form,

                processData:false,

                contentType:false,

                success: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(){

            varform =newFormData(document.getElementById("tf"));

// var req = new XMLHttpRequest();

//  req.open("post", "${pageContext.request.contextPath}/public/testupload", false);

//  req.send(form);            

$.ajax({

                url:"${pageContext.request.contextPath}/public/testupload",

                type:"post",

                data:form,

                processData:false,

                contentType:false,

                success:function(data){

                    window.clearInterval(timer);

                    console.log("over..");

                },

                error: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><property name="maxInMemorySize" value="10240000"></property></bean>

不然会接收不到数据,当然,后台的话,我们这里就先不管。

方法二:使用jquery.form.js

Options对象

ajaxForm和ajaxSubmit都支持众多的选项参数,这些选项参数可以使用一个Options对象来提供。


它也支持对一个表单的ajax提交,而且提交方式更为简便,如下:

<form id="tf">

<input type="file" name="img"/>

<input type="text" name="username"/>

<input type="button" value="提" onclick="test();"/>

</form>

下面使用jquery.form.js的表单插件来提交表单

$("#tf").ajaxSubmit();

就是这么简单,你也不要问我为什么就是这么简单,然后它就是会把整个表单,作为一个ajax来提交,同样的,它也支持文件上传!一些其它的用法,请参照前面给出的说明就可以了

原文链接     https://www.cnblogs.com/zhuxiaojie/p/4783939.html#autoid-1-0-0

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容