使用jquery Ajax实现上传附件功能


Posted in jQuery onOctober 23, 2018

用过jquery的Ajax的人肯定都知道,Ajax的默认编码方式是”application/x-www-form-urlencoded“,此编码方式只能编码文本类型的数据,因此Ajax发送请求的时候,会把data序列化成 一个个String类型的键值对,此种传输数据的方式能够满足大部分应用场景,然而当传输的数据里有附件的时候,此序列化机制便是我们的绊脚石。Ajax本身的序列化机制的硬伤归其原因在于在html4的时代,没有FileReader接口,在页面里无法读取File(Blob)文件,用document.getElementById("文件控件的id").value只能拿到文件的name,因此去序列化去编码它也无从谈起(个人观点,有不同意见的欢迎给我留言)。

众所周知,用form提交表单的时候,有附件的时候,只要设置form的enctype="multipart/form-data",便可以上传附件。于是博主想到,若是能用Ajax提交一个form,那上传附件岂不是变的简单,再也不需要使用类似AjaxFileUpload之类的插件来作上传。html5让这一切便的简单。

FormData是html5的接口,使用它一行代码便可以拿到整个form表单对象:

     var form = new FormData(document.getElementById("form"));

然后我们拿着这个form对象,去赋给Ajax的data,并且阻止它将参数转成成String类型的键值对,此举需要设置processData属性为false,此属性默认为true;同时设置Ajax的编码方式为false(contentType: false),在form表单里已经设置了编码方式,Ajax的编码机制已经不需要,这样我们就可以用Ajax去提交一个form对象,从而解决表单有附件的问题。需要注意的是,务必将Ajax的提交方式,设置为post,get请求只能携带几kb的数据。若是不设置processData为false,去提交带附件的form同样是提交不上去的,它的序列化机制是硬伤。所以提交的时候,只能不使用它的序列化机制。

一言以蔽之:借Ajax的壳,去提交form。

示例如下:

<!DOCTYPE html>
<html>
<head>
  <script src="js/jquery-1.9.1.min.js"></script>
  <meta charset="utf-8" />
  <title>Ajax提交form</title>
  <script type="text/javascript">
  function test(){
   var form = new FormData(document.getElementById("form"));
   $.ajax({
   url:"接口地址",
   type:"post",
   data:form,
   cache: false,
   processData: false,
   contentType: false,
   success:function(data){
      alert("操作成功!");
   },
   error:function(e){
     alert("网络错误,请重试!!");
    }
   });    
  }
</script>
</head>
<body>
<form id="form" enctype="multipart/form-data">
  <input type="text" id="name" name="name" />
  <input type="text" id="phone" name="phone" />
  <input type="text" id="content" name="content" />
  <input type="text" id="price" name="price" />
  <input type="text" id="ifPhone" name="ifPhone" />
  <input type="text" id="ifCerName" name="ifCerName" />
  <input type="text" id="endTime" name="endTime" />
  <input type="text" id="type" name="type" />
<input type="file" id="fileAttach" name="fileAttach" />
<input type="button" onclick="test()" value="上传" />
</form>
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

jQuery 相关文章推荐
详谈jQuery.load()和Jsp的include的区别
Apr 12 jQuery
jquery Form轻松实现文件上传
May 24 jQuery
bootstrap+jQuery实现的动态进度条功能示例
May 25 jQuery
jQuery Collapse1.1.0折叠插件简单使用
Aug 28 jQuery
前端html中jQuery实现对文本的搜索功能并把搜索相关内容显示出来
Nov 14 jQuery
jQuery实现每隔一段时间自动更换样式的方法分析
May 03 jQuery
jQuery实现的页面弹幕效果【测试可用】
Aug 17 jQuery
jQuery实现为动态添加的元素绑定事件实例分析
Sep 07 jQuery
jQuery实现的模仿雨滴下落动画效果
Dec 11 jQuery
jQuery控制input只能输入数字和两位小数的方法
May 16 jQuery
jQuery实现input[type=file]多图预览上传删除等功能
Aug 02 jQuery
使用jQuery实现购物车
Oct 29 jQuery
jquery实现动态添加附件功能
Oct 23 #jQuery
jQuery.validate.js表单验证插件的使用代码详解
Oct 22 #jQuery
jQuery轻量级表单模型验证插件
Oct 15 #jQuery
jquery实现联想词搜索框和搜索结果分页的示例
Oct 10 #jQuery
jQuery 获取除某指定对象外的其他对象 ( :not() 与.not())
Oct 10 #jQuery
jquery.param()实现数组或对象的序列化方法
Oct 08 #jQuery
jQuery实现点击图标div循环放大缩小功能
Sep 30 #jQuery
You might like
php读取javascript设置的cookies的代码
2010/04/12 PHP
用js实现多域名不同文件的调用方法
2007/01/12 Javascript
兼容ie、firefox的图片自动缩放的css跟js代码分享
2012/01/21 Javascript
js控制frameSet示例
2013/09/10 Javascript
键盘上一张下一张兼容IE/google/firefox等浏览器
2014/01/28 Javascript
jQuery中使用data()方法读取HTML5自定义属性data-*实例
2014/04/11 Javascript
jQuery+jsp实现省市县三级联动效果(附源码)
2015/12/03 Javascript
原生javascript实现的一个简单动画效果
2016/03/30 Javascript
通过jquery-ui中的sortable来实现拖拽排序的简单实例
2016/05/24 Javascript
原生和jQuery的ajax用法详解
2017/01/23 Javascript
vue component组件使用方法详解
2017/07/14 Javascript
如何测量vue应用运行时的性能
2019/06/21 Javascript
vue h5移动端禁止缩放代码
2019/10/28 Javascript
[48:24]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第一场 12.09
2020/12/12 DOTA
python中的列表推导浅析
2014/04/26 Python
深入理解NumPy简明教程---数组2
2016/12/17 Python
用Pygal绘制直方图代码示例
2017/12/07 Python
Python+matplotlib实现填充螺旋实例
2018/01/15 Python
Python递归函数 二分查找算法实现解析
2019/08/12 Python
下载与当前Chrome对应的chromedriver.exe(用于python+selenium)
2020/01/14 Python
Python 自由定制表格的实现示例
2020/03/20 Python
MxNet预训练模型到Pytorch模型的转换方式
2020/05/25 Python
PyQt5.6+pycharm配置以及pyinstaller生成exe(小白教程)
2020/06/02 Python
python交互模式基础知识点学习
2020/06/18 Python
Python3读写ini配置文件的示例
2020/11/06 Python
CSS3教程(9):设置RGB颜色
2009/04/02 HTML / CSS
大学生水果店创业计划书
2014/01/28 职场文书
推普周活动总结
2014/08/28 职场文书
竞选学习委员演讲稿
2014/09/01 职场文书
四风问题对照检查材料整改措施
2014/09/27 职场文书
老人节标语大全
2014/10/08 职场文书
玩手机检讨书1000字
2014/10/20 职场文书
2014年大堂经理工作总结
2014/11/21 职场文书
小学优秀班主任材料
2014/12/17 职场文书
军训个人总结
2015/03/03 职场文书
遗失证明范文
2015/06/19 职场文书