使用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实现分页功能(含ajax请求、后台数据、附完整demo)
Apr 03 jQuery
jQuery自定义元素右键点击事件(实现案例)
Apr 28 jQuery
jquery对table做排序操作的实例演示
Aug 10 jQuery
Mui使用jquery并且使用点击跳转新窗口的实例
Aug 19 jQuery
jQuery实现手机号正则验证输入及自动填充空格功能
Jan 02 jQuery
jQuery+SpringMVC中的复选框选择与传值实例
Jan 08 jQuery
jQuery代码优化方法总结
Jan 29 jQuery
jQuery实现DIV响应鼠标滑过由下向上展开效果示例【测试可用】
Apr 26 jQuery
通过jquery.cookie.js实现记住用户名、密码登录功能
Jun 20 jQuery
jQuery实现html可联动的百分比进度条
Mar 26 jQuery
如何基于jQuery实现五角星评分
Sep 02 jQuery
jquery实现广告上下滚动效果
Mar 04 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
模板引擎正则表达式调试小技巧
2011/07/20 PHP
php实现微信公众号主动推送消息
2015/12/31 PHP
枚举JavaScript对象的函数
2006/12/22 Javascript
JS 建立对象的方法
2007/04/21 Javascript
用js模拟struts2的多action调用示例
2014/05/19 Javascript
js动态创建标签示例代码
2014/06/09 Javascript
学习JavaScript设计模式(多态)
2015/11/25 Javascript
jQuery模拟物体自由落体运动(附演示与demo源码下载)
2016/01/21 Javascript
js提交form表单,并传递参数的实现方法
2016/05/25 Javascript
JavaScript获取当前url根目录(路径)
2016/06/17 Javascript
深入浅出ES6新特性之函数默认参数和箭头函数
2016/08/01 Javascript
JS判断浏览器是否安装flash插件的简单方法
2016/09/13 Javascript
JS经典正则表达式笔试题汇总
2016/12/15 Javascript
js学习总结_选项卡封装(实例讲解)
2017/07/13 Javascript
使用D3.js构建实时图形的示例代码
2018/08/28 Javascript
使用vue实现各类弹出框组件
2019/07/03 Javascript
vue项目查看vue版本及cli版本的实现方式
2020/10/24 Javascript
Javascript中的奇葩知识,你知道吗?
2021/01/25 Javascript
[03:42]2014DOTA2西雅图国际邀请赛 Navi战队巡礼
2014/07/07 DOTA
简单说明Python中的装饰器的用法
2015/04/24 Python
Python对文件和目录进行操作的方法(file对象/os/os.path/shutil 模块)
2017/05/08 Python
快速了解Python相对导入
2018/01/12 Python
详解django.contirb.auth-认证
2018/07/16 Python
Python爬虫运用正则表达式的方法和优缺点
2019/08/25 Python
python函数定义和调用过程详解
2020/02/09 Python
python3 re返回形式总结
2020/11/20 Python
python 写一个文件分发小程序
2020/12/05 Python
Ooni英国官网:披萨烤箱
2020/05/31 全球购物
安全检查管理制度
2014/02/02 职场文书
关于保护环境的建议书
2014/05/13 职场文书
纪念九一八事变演讲稿:忘记意味着背叛
2014/09/14 职场文书
关于成绩下滑的自我检讨书
2014/09/20 职场文书
戒毒悔改检讨书
2014/09/21 职场文书
钱学森电影观后感
2015/06/04 职场文书
旗帜观后感
2015/06/08 职场文书
初中军训感言
2015/08/01 职场文书