var formData = new FormData();
<form id="coords" class="coords" onsubmit="return false;" action="">
     <!-- 主要的控件 -->
      <input id="file" type="file" >
<div class="inline-labels">
<label>X1 <input type="text" size="4" id="x1" name="x1" /></label> <label>Y1
<input type="text" size="4" id="y1" name="y1" />
</label> <label>X2 <input type="text" size="4" id="x2" name="x2" /></label>
<label>Y2 <input type="text" size="4" id="y2" name="y2" /></label> <label>W
<input type="text" size="4" id="w" name="w" />
</label> <label>H <input type="text" size="4" id="h" name="h" /></label>
</div>
</form>
<button id="btn">上传头像</button>

主要是通过formData封装我们要传递的参数,然后使用ajax传递到后端。

这里有两中方式

1.

 $("#btn").click(function(){
  var form = document.getElementById("coords");//获取到form表单$("coords")[0] 这样也可以
   var formData = new FormData(form);//创建一个formData对象,将表单中的数据放进去,有一个问题,就是普通参数可以放进去,在后端也可以拿到,文件也可以拿到,昨天测试了
    
        $.ajax({//ajax
url: "/upload/uploadHeaderPic",//文件上传路径
type: "POST",
processData : false,//不处理数据,必须为false
contentType : false,//不设置内容类型,必须为false
data: formData,//这个就是我们封装的参数的一个formData
dataType:"json",
success: function(data){
//layer.msg(data.msg)
alert(data.msg);
console.log("msg",data.msg)
},
error:function(e){
console.log("msg","ajax调用出现错误")
}
        });
 }

2.

 $("#btn").click(function(){
    //这里是只创建对象,不把整个表单放进去,而是一个一个的放进去
var formData = new FormData();//创建一个formData对象

        var x1 = $('#x1').val(),
        x2 = $('#x2').val(),
        y1 = $('#y1').val(),
        y2 = $('#y2').val();
        formData.append('x11',x1 );
        formData.append('y11',y1 );
        formData.append('x22',x2 );
        formData.append('y22',y2 );

     $.ajax({//ajax
url: "/upload/uploadHeaderPic",
type: "POST",
processData : false,//不处理数据,必须为false
contentType : false,//不设置内容类型,必须为false
data: formData,
dataType:"json",
success: function(data){
//layer.msg(data.msg)
alert(data.msg);
console.log("msg",data.msg)
},
error:function(e){
console.log("msg","ajax调用出现错误")
} });
})

上边都是普通文本参数的传递。下边说下图片的传递。

formData.append('img0', $('#file')[0].files[0]);

图片的传递也是拿到图片的值,然后设置参数传递。
但是需要注意的一点就是如何拿到图片的值。
$('#file')[0].files[0] //这个取值就可以拿到 <input id="file" type="file" > 的值。这里都写的是数组,$ 对象取值的问题吧。需要研究!!!

这里设置值的时候如果写成这样
formData.append('img0', $('#file')[0].files);我是用的是jfinal测试的,所以,这里是拿不到值的。具体原因未知。

如果多个值可以循环遍历

for(var i=0; i<$('#file')[0].files.length;i++){//使用for循环将选择的文件一个一个添加(append)到formData对象中
  formData.append('img0', $('#file')[0].files[i]);//注意:如果你使用的是jfinal框架这里的key(img)必须是不同的,如果相同的话文件能上传但是拿上传文件名的时候只能拿到一个
}

这种循环遍历的方式也是可以拿到值的。

后台取值的时候jfinal的方式 getFiles("head"); “head”这个可以不写,这个是一个设置上传路径。getFiles()就可以拿到全部的值。

普通取值的话,直接getPara("xx");就可以

图片的传递方式和上边的普通传递参数方式一样都是使用一样的ajax方式

JS专题-FormData的更多相关文章

  1. c#+js 使用formdata上传文件

    如果不是使用form表单submit的形式,我们可以手动通过formdata传值(针对文件上传等) 比如: <html> <head> <meta name=" ...

  2. 使用JS的FormData对象

    利用FormData对象,你可以使用一系列的键值对来模拟一个完整的表单,然后使用XMLHttpRequest发送这个"表单". 创建一个FormData对象 你可以先创建一个空的F ...

  3. Node.js 专题

    前提电脑中已经安装过NodeJS, npm.现在需要进行升级操作.1.查看当前的npm和NodeJs的版本: C:\Users\Administrator>node -v v4.4.3 C:\U ...

  4. js通过formData上传文件,Spring后台处理

    1.前端 var formData = new FormData(); formData.append('file', $("#file").val()); $.ajax({ ur ...

  5. js中formData的使用

    FormData 对象的使用 https://developer.mozilla.org/zh-CN/docs/Web/API/FormData/Using_FormData_Objects http ...

  6. js中FormData+XMLHttpRequest数据传输

    前言: 首先我们需要了解,前后端进行数据传输依赖于浏览器的XMLHttpRequest对象 一.什么是XMLHttpRequest对象? XMLHttpRequest 是DOM对象,提供了对于http ...

  7. 前端程序员难翻身,没有好的学习方法,你永远无法成功,vue.js专题

    学习vue正确思路,是先学vue-cli,再学vue.js单文件引用的用法,这样会在极短时间内撤底撑握vue, 如果先学vue.js单文件用法,再去学vue-cli4,可以说是重新学vue,,,,难处 ...

  8. 【干货分享】Node.js 中文学习资料和教程导航

    这篇文章来自 Github 上的一位开发者收集整理的 Node.js 中文学习资料和教程导航.Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念,它的目标是帮助程 ...

  9. node.js中文资料导航 Mark

    Node.js HomePage Infoq深入浅出Node.js系列(进阶必读) Node.js中文文档 被误解的 Node.js Node.js C++ addon编写实战系列 热门node.js ...

随机推荐

  1. 实验吧-杂项-flag.xls(notepad++查找)、保险箱(linux文件分解、密码破解)

    flag.xls 下载文件,用notepad++打开,查找flag就能找到flag. 保险箱(linux文件分解.密码破解) 将图片保存下来,用kali的binwalk分析,发现有rar文件,然后用f ...

  2. UVA - 10791 Minimum Sum LCM(最小公倍数的最小和)

    题意:输入整数n(1<=n<231),求至少两个正整数,使得它们的最小公倍数为n,且这些整数的和最小.输出最小的和. 分析: 1.将n分解为a1p1*a2p2……,每个aipi作为一个单独 ...

  3. UVA - 10570 Meeting with Aliens(外星人聚会)(暴力枚举)

    题意:输入1~n的一个排列(3<=n<=500),每次可以交换两个整数.用最少的交换次数把排列变成1~n的一个环状序列. 分析:正序反序皆可.枚举每一个起点,求最少交换次数,取最小值. 求 ...

  4. discuz伪静态问题(简单)

    提前声明一下我用的是宝塔面板.Linux系统.Nginx Web Server.经过一上午的摸索(我很菜了),终于在一个很无语的地方成功搞了伪静态1.2.点击查看当前的 Rewrite 规则3.我的是 ...

  5. promise核心6 自定义promise

    1.定义整体结构(不写实现) 定义一个自己的promise的库 lib(库的简写) 一个js文件.一个js模块(不能用es6  也不能commjs)(用es5模块语法 ) 匿名函数自调用.IIFE ( ...

  6. id就是方法名,如何调用;批量input怎么获取他们的key值作为参数

    1.很多Dom的时候,一个个写会比较麻烦,我用ID记载他的方法名: 2.很多input,在数据交互的时候一个个获取会比较繁琐,给一个方法,批量获取. <div id="searchSt ...

  7. Sequence Models Week 1 Improvise a Jazz Solo with an LSTM Network

    Improvise a Jazz Solo with an LSTM Network Welcome to your final programming assignment of this week ...

  8. class选择器,外部样式表,选择器优先级

    class选择器: 先在相应标签中设置一个class属性,如class=“class名”.class名{ ……css样式}注:class名以英文字母开头,可以多个标签重复使用.优先级:标签名选择器 & ...

  9. CTF -bugku-web-web基础 矛盾

    ---恢复内容开始--- 以GET方式获取参数 is_numeric()函数是判断是否为数字或者数字字符串 所以不能是数字或者数字字符串,但是下面$num == 1 有要求为数字1 所以构造1+任意字 ...

  10. tp5 输入域名即访问指定页面

    遇到PC官网类型的项目,经常会遇到隐藏入口文件和输入域名即可打开官网首页的需求.需要修改站点的默认加载文件和伪静态的配置才可以生效. 以下为nginx1.15版本,宝塔面板的修改方式.修改入口文件为w ...