使用ajax提交form表单,包括ajax文件上传

前言

使用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", 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="提" οnclick="test();"/>
                        .............</form>

大家注意到没有,里面可是有文件的哦!

没错,FormData还支持困扰众多开发者已久的ajax的上传文件,以前我们上传文件,需要写一个表单直接刷新提交,但是这里不需要,下面给出提交代码:

        function test(){var form = new FormData(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

Jquery.form.js是一个强大的表单插件,其大量的提供了表单操作的各种简便的方法,下面给出一些Jquery.form.js的说明:

ajaxForm 增加所有需要的事件监听器,为ajax提交表单做准备。ajaxForm并不能提交表单。在document的ready函数中,使用ajaxForm来为ajax提交表单进行准备。 接受0个或1个参数。参数可以是一个回调函数,也可以是一个Options对象。 $("#formid").ajaxForm();
ajaxSubmit 使用ajax提交表单。 接受0个或1个参数。参数可以是一个回调函数,也可以是一个Options对象。

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

$("#formid").submit(function(){

$(this).ajaxSubmit();

return false;

});

formSerialize 将表单串行化(或序列化)为一个查询字符串。这个方法将返回以下格式的字符串:name1=value1&name2=value2。 $("#formid").formSerialize();
fieldSerialize 将表单的字段元素串行化(或序列化)为一个查询字符串。当只有部分表单字段需要进行串行化(或序列化)时,使用这个就很方便了。返回以下格式的字符串:name=value1&name2=value2。 $("#formid .specialFields").fieldSerialize();
fieldValue 返回匹配插入数组中的表单元素值。该方法以数组的形式返回数据。如果元素值被判定可能无效,则数组为空。 $("#formid :password").fieldValue();
resetForm 将表单恢复到初始状态。 $("#formid").resetForm();
clearForm 清除表单元素。该方法将所有的text、password、textarea置空,清除select元素中的选定,以及所有radio按钮和checkbox按钮重置为非选定状态。 $("#formid").clearForm();
clearFields 清除字段元素。只有部分表单元素需要清除时方便使用。 $("#formid .specialFields").clearFields();

Options对象

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

target 指明页面中由服务器响应进行更新的元素。元素的值可能被指定为一个jQuery选择器字符串、一个jquery对象、一个DOM元素。 默认值:null
url 指定提交表单数据的URL。 默认值:表单的action属性值
type 指定提交表单数据的方法(method):“GET”或“POST”。 默认值:GET
beforeSubmit 表单提交前被调用的回调函数。如果回调函数返回false表单将不被提交。回调函数带三个调用参数:数组形式的表单数据,jQuery表单对象,以及传入ajaxForm/ajaxSubmit中的Options对象。 默认值:null
success 表单成功提交后调用的回调函数。然后dataType选项值决定传回responseText还是responseXML的值。 默认值:null
dataType 返回的数据类型:null、"xml"、"script"、"json"其中之一。 默认值:null
resetForm 表示如果表单提交成功是否进行重置。 默认值:null
clearForm 表示如果表单提交成功是否清除表单数据。 默认值:null

那么现在来说一些它的主要用法吧!

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

html:

<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来提交,同样的,它也支持文件上传!一些其它的用法,请参照前面给出的说明就可以了!


感谢您的阅读,如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮。本文欢迎各位转载,但是转载文章之后必须在文章页面中给出作者和原文连接

分类: javascript/jquery
好文要顶 关注成功 收藏该文

朱小杰
关注 - 5
粉丝 - 56

关注成功

16

« 上一篇:Spring MVC学习
» 下一篇:html中获取图片的真实尺寸

转载于:https://www.cnblogs.com/anruy/p/6837385.html

使用ajax提交form表单,包括ajax文件上传 转http://www.cnblogs.com/zhuxiaojie/p/4783939.html...相关推荐

  1. ajax post form上传图片,ajax怎样提交form表单与实现文件上传

    这次给大家带来ajax怎样提交form表单与实现文件上传,ajax提交form表单与实现文件上传的注意事项有哪些,下面就是实战案例,一起来看一下. 前几天,发现了一些小问题.我在写后台管理页面时,需要 ...

  2. ajax提交form表单,包含文件file

    function submitform(){          var form = document.forms.namedItem("moveForm");//表单name属性 ...

  3. ajax 表单提交传文件,Ajax提交Form表单及文件上传

    刚刚申请下来的博客,写得第一篇.有点小激动,本人以前是一名工业3D设计师突然有些变故做上了JavaWeb开发: 前几天,发现了一些小问题.我在写后台管理页面时,需要上传一张图片.于是我就用很普通的Fo ...

  4. form表单提交以及用Jquery实现ajax提交form表单

    在form标签中添加Action(提交的地址)和method(post),且有一个submit按钮(<input type='submit'>)就可以进行数据的提交,每一个input标签都 ...

  5. 通过php jq ajax 提交form表单

    参考http://www.php100.com/html/webkaifa/PHP/PHPyingyong/2013/0619/13568.html html <div id="con ...

  6. 学习日志day45(2021-09-09)(1、有道翻译API使用json格式数据 2、JSONP 3、Ajax提交form表单 4、Web Uploader)

    学习内容:学习JavaWeb(Day45) 1.有道翻译API使用json格式数据 2.JSONP 3.Ajax提交form表单 4.Web Uploader 1.有道翻译API使用json格式数据 ...

  7. SpringMVC 用对象接收 ajax提交form表单

    SpringMVC 用对象接收 ajax提交form表单  转载于:http://www.cnblogs.com/klwyrn/p/5955152.html 第一种方法(简单易用,防蚊虫): 1.1 ...

  8. 利用ajax提交form表单数据

    利用thymeleaf引擎创建的html中,使用了adminLTE模板,ajax提交form表单数据,本以为很容易实现,却遇到了很多问题,这里进行总结. 1.get方式提交 通过serialize() ...

  9. ajax提交form表单后台@RequestBody接收json字符串

    好久没搞ajax提交form表单了. 在修改过程中遇到报错: 1.Content type 'application/x-www-form-urlencoded;charset=UTF-8' not ...

最新文章

  1. 必须认识的http请求包
  2. geojson在线生成工具_logofree详解:LOGO设计在线生成
  3. April Fools Contest 2017 题解
  4. 和css3实例教程_最好CSS和CSS3教程
  5. 关于Go语言,你可能会讨厌的五件事
  6. 19【13】DIN:深度兴趣网络
  7. 基于gdal的格网插值
  8. 火狐开发----如何快速的安装火狐XPI文件
  9. 网络编程1之send、recv函数详解
  10. 中国IT排名百强公司
  11. 100 位测试工程师的 2018 年度关键词与 2019 展望
  12. C++中重载和重写的区别
  13. 心情随笔--我与考研战友的故事
  14. django项目中使用crontab定时任务
  15. 2020计算机考研初试考试先后顺序,2020考研初试考试时间及科目安排
  16. 文件格式FAT、FAT32、exFAT之间关系和区别
  17. 欧洲上班族心碎:工作时网聊将无隐私可言
  18. C#远程服务器返回错误: (500) 内部服务器错误
  19. 一个小白的转行自学Python的经历
  20. python百度地图poi_百度地图数据采集手把手教,从此POI数据不再是愁

热门文章

  1. 中国最受欢迎50大技术博客评选结果详见
  2. 计算机方向键是哪个键,left键是哪个键
  3. java大文件pdf水印_java – 如何扩展PDF的页面大小以添加水印?
  4. The word 'jsp' is not correctly spelled. Eclipse 拼写检查出错处理办法
  5. 【SaaS播客】onboard4. 连线硅谷顶尖Product-Led Growth公司产品经理,聊聊如何打造一流PLG产品
  6. bios密码解锁软件_你知道自己的电脑还有这么一个BIOS程序吗
  7. 阿波罗无法通过链接外网
  8. Unity手游制作记-制作通用镜头控制器
  9. SEM竞价|这5个方面重要性你理解透没有?
  10. openwrt 做二级路由 同网段无线桥接教程 relayd