使用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插件HighCharts绘制2D饼图效果示例【附demo源码下载】
Mar 21 jQuery
Spring shiro + bootstrap + jquery.validate 实现登录、注册功能
Jun 02 jQuery
jQuery实现 RadioButton做必选校验功能
Jun 15 jQuery
jQuery实现节点的追加、替换、删除、复制功能示例
Jul 11 jQuery
jQuery实现锚点向下平滑滚动特效示例
Aug 29 jQuery
jQuery实现的手动拖动控制进度条效果示例【测试可用】
Apr 18 jQuery
jQuery模拟12306城市选择框功能简单实现方法示例
Aug 13 jQuery
基于Bootstrap和JQuery实现动态打开和关闭tab页的实例代码
Jun 10 jQuery
javascript(基于jQuery)实现鼠标获取选中的文字示例【测试可用】
Oct 26 jQuery
jQuery实现可编辑的表格
Dec 11 jQuery
jQuery 动画与停止动画效果实例详解
May 19 jQuery
js和jquery判断数据类型的4种方法总结
Aug 28 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学习 变量使用总结
2011/03/24 PHP
php代码运行时间查看类代码分享
2011/08/06 PHP
php数组函数序列之array_combine() - 数组合并函数使用说明
2011/10/29 PHP
PHP四大安全策略
2014/03/12 PHP
浅析PHP编程中10个最常见的错误
2014/08/08 PHP
php中instanceof 与 is_a()区别分析
2015/03/03 PHP
PHP守护进程化在C和PHP环境下的实现
2017/11/21 PHP
js各种验证文本框输入格式(正则表达式)
2010/10/22 Javascript
jQuery之字体大小的设置方法
2014/02/27 Javascript
ECMAScript5中的对象存取器属性:getter和setter介绍
2014/12/08 Javascript
JS DOM实现鼠标滑动图片效果
2020/09/17 Javascript
javascript 注释代码的几种方法总结
2017/01/04 Javascript
vue监听滚动事件实现滚动监听
2017/04/11 Javascript
Vue组件全局注册实现警告框的实例详解
2018/06/11 Javascript
小程序登录之支付宝授权的实现示例
2019/12/13 Javascript
JavaScript观察者模式原理与用法实例详解
2020/03/10 Javascript
[27:53]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS iG
2014/05/26 DOTA
python操作sqlite的CRUD实例分析
2015/05/08 Python
Java Web开发过程中登陆模块的验证码的实现方式总结
2016/05/25 Python
Python爬取当当、京东、亚马逊图书信息代码实例
2017/12/09 Python
Django视图和URL配置详解
2018/01/31 Python
python3+opencv3识别图片中的物体并截取的方法
2018/12/05 Python
网易有道2017内推编程题 洗牌(python)
2019/06/19 Python
Python实现代码统计工具
2019/09/19 Python
Python Celery多队列配置代码实例
2019/11/22 Python
谈谈python垃圾回收机制
2020/09/27 Python
美国宠物商店:Wag.com
2016/10/25 全球购物
美国环保婴儿用品公司:The Honest Company
2017/11/23 全球购物
安全生产管理合理化建议书
2014/03/12 职场文书
快餐公司创业计划书
2014/04/29 职场文书
文明礼仪标语
2014/06/13 职场文书
离婚协议书怎么写2014
2014/09/30 职场文书
领导班子整改措施
2014/10/24 职场文书
2015学校师德师风工作总结
2015/04/22 职场文书
背起爸爸上学观后感
2015/06/08 职场文书
React-vscode使用jsx语法的问题及解决方法
2021/06/21 Javascript