使用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开源组件BootstrapValidator使用详解
Jun 29 jQuery
jquery实现限制textarea输入字数的方法
Sep 06 jQuery
jQuery UI 实例讲解 - 日期选择器(Datepicker)
Sep 18 jQuery
bootstrap可编辑下拉框jquery.editable-select
Oct 12 jQuery
利用jQuery+localStorage实现一个简易的计时器示例代码
Dec 25 jQuery
jquery实现点击a链接,跳转之后,该a链接处显示背景色的方法
Jan 18 jQuery
jQuery获取所有父级元素及同级元素及子元素的方法(推荐)
Jan 21 jQuery
js和jQuery以及easyui实现对下拉框的指定赋值方法
Jan 23 jQuery
jQuery 实现倒计时天,时,分,秒功能
Jul 31 jQuery
JQuery Ajax执行跨域请求数据的解决方案
Dec 10 jQuery
jQuery选择器之基本过滤选择器用法实例分析
Feb 19 jQuery
9种方法优化jQuery代码详解
Feb 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
php中对2个数组相加的函数
2011/06/24 PHP
PHP 数据结构 算法描述 冒泡排序 bubble sort
2011/07/10 PHP
PHP url 加密解密函数代码
2011/08/26 PHP
php实现分页工具类分享
2014/01/09 PHP
php 发送带附件邮件示例
2014/01/23 PHP
PHP中SESSION的注销与清除
2015/04/16 PHP
浅谈Coreseek、Sphinx-for-chinaese、Sphinx+Scws的区别
2016/12/15 PHP
laravel 字段格式化 modle 字段类型转换方法
2019/09/30 PHP
如何在PHP中使用AES加密算法加密数据
2020/06/24 PHP
关于jquery append() html时的小问题的解决方法
2010/12/16 Javascript
jquery随意添加移除html的实现代码
2011/06/21 Javascript
jquery中dom操作和事件的实例学习 下拉框应用
2011/12/01 Javascript
jquery及原生js获取select下拉框选中的值示例
2013/10/25 Javascript
常用DOM整理
2015/06/16 Javascript
全面理解闭包机制
2016/07/11 Javascript
AngularJS之依赖注入模拟实现
2016/08/19 Javascript
JS中使用textPath实现线条上的文字
2017/12/25 Javascript
vue实现新闻展示页的步骤详解
2019/04/11 Javascript
Node.js对MongoDB进行增删改查操作的实例代码
2019/04/18 Javascript
微信小程序订阅消息(java后端实现)开发
2020/06/01 Javascript
python文件与目录操作实例详解
2016/02/22 Python
ansible作为python模块库使用的方法实例
2017/01/17 Python
Django如何自定义分页
2018/09/25 Python
tensorflow 获取所有variable或tensor的name示例
2020/01/04 Python
python 子类调用父类的构造函数实例
2020/03/12 Python
Python中如何定义一个函数
2016/09/06 面试题
通用自荐信范文
2014/03/14 职场文书
见习期自我鉴定范文
2014/03/19 职场文书
2014年入党积极分子党课学习心得体会模板
2014/04/03 职场文书
文明礼仪演讲稿
2014/05/12 职场文书
民生工作实施方案
2014/05/31 职场文书
初中家长评语大全
2014/12/26 职场文书
2015年幼儿园中班开学寄语
2015/05/27 职场文书
2016年中秋节慰问信
2015/12/01 职场文书
2016年学校党支部创先争优活动总结
2016/04/05 职场文书
JAVA springCloud项目搭建流程
2022/05/11 Java/Android