jQuery Ajax使用FormData上传文件和其他数据后端web.py获取


Posted in jQuery onJune 11, 2017

XMLHttpRequest Level 2 添加了一个新的接口——FormData。与普通的 Ajax 相比,使用 FormData 的最大优点就是我们可以异步上传二进制文件。

jQuery 2.0+的版本支持FormData

方法一:使用<form>表单初始化FormData对象方式上传文件

•前端(JQuery):

<form enctype="multipart/form-data">
  <input type="file" name="myfile" onchange="loadFile(this.files[0])">
</form>
<script>
  function loadFile(file){
    var formdata = new FormData($$('form')[0]);
    $.ajax({
      url: 'jobs/add',
      type: 'POST',
      datatype: 'json',
      data: formdata,
      cache:false,
      traditional: true,
      contentType: false,
      processData: false,
      success: function (data) {},
      error: function () {}
    });
  }
</script>

•后台(web.py):

class Add:
  def POST(self):
    i = web.input(myfile={})
    print(i['myfile'].filename) #文件名
    print(i['myfile'].value) #文件内容
    print(i['myfile'].file.read()) #文件内容

 注意:

1.<form>的enctype属性需要设置为“multipart/form-data”

2.$.ajax中processData、contentType和cache需要设置为false

3.后端通过web.input获取文件的字段名,同前端指定的input标签的name属性

方法二√:不用<form>,使用FormData对象添加字段方式上传文件

有时,我们并不想用

标签,而且通过ajax传给后端的并不只有文件,可能还有其他的键值对,这时就可以用这个方法

•前端(JQuery):

<input type="file" onchange="loadFile(this.files[0])" />
function loadFile(file){
  container.fd = new FormData();
  container.fd.append('myfile',file);
  container.fd.append('otherkey',othervalue);
  $.ajax({
    url: 'jobs/add',
    type: 'POST',
    datatype: 'json',
    data: fd,
    cache:false,
    traditional: true,
    contentType: false,
    processData: false,
    success: function (data) {},
    error: function () {}
  });
}

•后台(web.py):

class Add:
  def POST(self):
    i = web.input(myfile={}, otherkey='')
    print(i['myfile'].filename) #文件名
    print(i['myfile'].value) #文件内容
    print(i['myfile'].file.read()) #文件内容

 注意:

1.没有<form>标签(有了也不错)

2.append()方法的第二个参数是文件对象,在html中已经通过loadFile方法的参数传过来

3.后端通过web.input获取文件的字段名,同前端append()方法的第一个参数

4.因为通过web.input获取的值都是字符串,如果除文件以外的键值对传过来是null,会自动转化为字符串'null'。这点处理的时候需要注意

以上所述是小编给大家介绍的jQuery Ajax使用FormData上传文件和其他数据后端web.py获取,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

jQuery 相关文章推荐
jQuery实现Select下拉列表进行状态选择功能
Mar 30 jQuery
jQuery设置图片等比例缩小的方法
Apr 29 jQuery
jQuery遍历节点方法汇总(推荐)
May 13 jQuery
jQuery选择器特殊字符与属性空格问题
Aug 14 jQuery
jquery实现用户登陆界面(示例讲解)
Sep 06 jQuery
jQuery实现的点击标题文字切换字体效果示例【测试可用】
Apr 26 jQuery
jquery ajaxfileuplod 上传文件 essyui laoding 效果【防止重复上传文件】
May 26 jQuery
jQuery实现根据身份证号获取生日、年龄、性别等信息的方法
Jan 09 jQuery
jquery 键盘事件 keypress() keydown() keyup()用法总结
Oct 23 jQuery
jQuery Datatables 动态列+跨列合并实现代码
Jan 30 jQuery
基于JavaScript或jQuery实现网站夜间/高亮模式
May 30 jQuery
ajax jquery实现页面某一个div的刷新效果
Mar 04 jQuery
jQuery复合事件结合toggle()方法的用法示例
Jun 10 #jQuery
jQuery复合事件用法示例
Jun 10 #jQuery
jQuery简单绑定单个事件的方法示例
Jun 10 #jQuery
jQuery正则验证注册页面经典实例
Jun 10 #jQuery
JQuery form表单提交前验证单选框是否选中、删除记录时验证经验总结(整理)
Jun 09 #jQuery
JQuery.dataTables表格插件添加跳转到指定页
Jun 09 #jQuery
jQuery为某个div加入行样式
Jun 09 #jQuery
You might like
header()函数使用说明
2006/11/23 PHP
PHP循环获取GET和POST值的代码
2008/04/09 PHP
PHP实例分享判断客户端是否使用代理服务器及其匿名级别
2014/06/04 PHP
PHP/ThinkPHP实现批量打包下载文件的方法示例
2017/07/31 PHP
鼠标移入移出事件改变图片的分辨率的两种方法
2013/12/17 Javascript
javascript异步编程的4种方法
2014/02/19 Javascript
jquery实现红色竖向多级向右展开的导航菜单效果
2015/08/31 Javascript
Underscore源码分析
2015/12/30 Javascript
javascript对象的创建和访问
2016/03/08 Javascript
快速掌握Node.js模块封装及使用
2016/03/21 Javascript
jQuery的ajax和遍历数组json实例代码
2016/08/01 Javascript
vue+element-ui动态生成多级表头的方法
2018/08/28 Javascript
小程序实现授权登陆的解决方案
2018/12/02 Javascript
js实现前端界面导航栏下拉列表
2020/08/27 Javascript
jQuery-App输入框实现实时搜索
2020/11/19 jQuery
[01:03:56]Mineski vs TNC 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
[46:58]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第一场 12.17
2020/12/19 DOTA
[52:03]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第三场 1月31日
2021/03/11 DOTA
python网络编程学习笔记(三):socket网络服务器
2014/06/09 Python
python常用web框架简单性能测试结果分享(包含django、flask、bottle、tornado)
2014/08/25 Python
python中__call__内置函数用法实例
2015/06/04 Python
Python 内置函数memoryview(obj)的具体用法
2017/11/23 Python
Python 批量刷博客园访问量脚本过程解析
2019/08/30 Python
python3.8 微信发送服务器监控报警消息代码实现
2019/11/05 Python
关于Tensorflow 模型持久化详解
2020/02/12 Python
python Shapely使用指南详解
2020/02/18 Python
Python pip使用超时问题解决方案
2020/08/03 Python
System.Array.CopyTo()和System.Array.Clone()有什么区别
2016/06/20 面试题
工作求职信
2014/07/04 职场文书
2015年党员公开承诺事项
2015/04/27 职场文书
论文致谢词范文
2015/05/14 职场文书
舌尖上的中国观后感
2015/06/02 职场文书
《金钱的魔力》教学反思
2016/02/20 职场文书
如何在C++中调用Python
2021/05/21 Python
Java异常处理try catch的基本用法
2021/12/06 Java/Android
Python何绘制带有背景色块的折线图
2022/04/23 Python