博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HTML5可预览多图片ajax上传(使用formData传递数据)
阅读量:6352 次
发布时间:2019-06-22

本文共 2821 字,大约阅读时间需要 9 分钟。

HTML5可预览多图片ajax上传(使用formData传递数据)

在介绍上传图片之前,我们简单的来了解下FormData的基本使用;介绍完成后这些基本知识后,我们会在文章最后提供一个demo,就是ajax多图片上传前预览效果。

1. formData的基本的用法:

首先创建一个 空对象实例 代码如下:
var formData = new FormData();

1-1 获取值

通过get(key)/getAll(key)来获取对应的value;比如:

formData.get("name"); // 获取key为name的第一个值。formData.getAll("name"); // 返回一个数组,获取key为name的所有值。

比如如下HTML代码:

             
标题

1-2 添加数据

可以通过append(key, value)来添加数据,如果指定的key不存在则会新增一条数据,如果key存在,则添加到数据的末尾。

var formData = new FormData();formData.append('name', 'kongzhi1');formData.append('name', 'kongzhi2');formData.append('name', 'kongzhi3');console.log(formData.get('name')); // kongzhi1console.log(formData.getAll('name')); // ["kongzhi1", "kongzhi2", "kongzhi3"]

1-3 设置修改数据

可以通过 set(key, value)来设置修改数据,如果指定的key不存在则会新增一条,如果存在,则会修改对应的值。

var formData = new FormData();formData.append("name", 'kongzhi1');console.log(formData.getAll("name")); // ["kongzhi1"]formData.set("name", 'kongzhi2');console.log(formData.getAll("name")); // ["kongzhi2"]

1-4 判断是否存在该数据

我们可以通过has(key) 来判断是否有对应的key值。

var formData = new FormData();formData.append("name", 'kongzhi1');formData.append("name2", null);console.log(formData.has("name")); // trueconsole.log(formData.has("name2")); // trueconsole.log(formData.has("name3")); // false

1-5 删除数据

通过delete(key), 来删除数据。

var formData = new FormData();formData.append("name", "kongzhi1");formData.append("name", "kongzhi2");console.log(formData.getAll("name")); // ["kongzhi1", "kongzhi2"]formData.delete("name");console.log(formData.getAll("name")); // []

二:使用XMLHttpRequest formData上传文件

XMLHttpRequest2 定义了FormData类型,FormData为序列化表单以及创建与表单格式相同的数据(用于通过xhr数据传输)提供了便利。
浏览器支持:IE9及IE9-不支持。

原审XMLHttpRequest提交formData数据如下demo:

             
标题
上传图片

2-2 使用jquery ajax方式来上传formData数据如下:

HTML代码如下:

javascript 代码如下:

var formdata = new FormData();// 上传到服务器的字段名称formdata.append("imgFile", $('#file')[0].files[0]);$.ajax({  url: self.url,  type: 'POST',  cache: false,  data: formdata,  timeout: 5000,  //必须false才会避开jQuery对 formdata 的默认处理   // XMLHttpRequest会对 formdata 进行正确的处理  processData: false,  //必须false才会自动加上正确的Content-Type   contentType: false,  xhrFields: {    withCredentials: true  },  success: function(data) {  },  error: function(XMLHttpRequest, textStatus, errorThrown) {  }

如上参数设置含义如下:

1. processData: false, 因为data值是formdata对象,不需要对数据做处理。
2. cache: false, 上传文件不需要缓存。
3. contentType: false, 因为是由<form>表单构造的FormData对象,且已经声明了属性enctype="multipart/form-data",所以这里设置为false。
4. xhrFields: { withCredentials: true }, 跨域请求设置

下面是一个 使用 ajax中的formData 多张图片上传前预览效果的一个demo。

formData 对ajax多张图片上传前预览效果如下

转载地址:http://njmla.baihongyu.com/

你可能感兴趣的文章
Effective前端1:能使用html/css解决的问题就不要使用JS
查看>>
网络攻防 实验一
查看>>
由莫名其妙的错误开始---浅谈jquery的dom节点创建
查看>>
磨刀-CodeWarrior11生成的Makefile解析
查看>>
String StringBuffer StringBuilder对比
查看>>
bootstrap随笔点击增加
查看>>
oracle 中proc和oci操作对缓存不同处理
查看>>
[LeetCode] Spiral Matrix 解题报告
查看>>
60906磁悬浮动力系统应用研究与模型搭建
查看>>
指纹获取 Fingerprint2
查看>>
面试题目3:智能指针
查看>>
取消凭证分解 (取消公司下的多个利润中心)
查看>>
flask ORM: Flask-SQLAlchemy【单表】增删改查
查看>>
vim 常用指令
查看>>
nodejs 获取自己的ip
查看>>
Nest.js 处理错误
查看>>
你好,C++(16)用表达式表达我们的设计意图——4.1 用操作符对数据进行运算...
查看>>
18.3 redis 的安装
查看>>
jdbc 简单连接
查看>>
Activiti 实战篇 小试牛刀
查看>>