1  easyui form提交

$('form').form('submit',{
  url:'';
  onSubmit:'';
  success:function(data){
//这种方法获取到的data是字符串的形式,需要将数据进行转化方可利用其内部的数据
  data=JSON.parse(data);
    if(data.result){
    } 
  }
})

提交的数据是利用jquery 中的serialize()方法,将表单中的数据转化为请求字符串的形式,我们可以使用$('form').serialize();来查看要提交的数据;

但是在此过程中一定注意若表单中有类似textarea的控件 ,且在输入域中输入了空格,获取到的参数信息会转化为‘+’号(par1=other&par2=-1&par3=sss+fffff++ffff)

是因为URL规范里就是要求空格在query string里被编码为加号吧

详见(https://en.wikipedia.org/wiki/Query_string#URL_encoding)

注:类似于$().serialize() 方法还有 $().serializeArray 和$().param(arr)方法,可以查看jquery手册学习

  $("#results").append( "<tt>" + $("form").serialize() + "</tt>" );

2  formData提交

新建FormData对象时有两种方将数据加载到实例对象中,其中之一是利用FormData对象的append方法,其二是将form表单元素作为参数传递到FormData构造函数内;如下:

    (1) var fd =  new FormData();
     fd.append("username", "Groucho");
     // fileInputElement中已经包含了用户所选择的文件
     fd.append("userfile", fileInputElement.files[0]); (2) var formData = new FormData(form); //内部form值需要时js原生对象
针对formdata需要注意两点:
    1 想要查看FormData对象内部的值时 需要使用方法entries()(对于ie8及以下存在兼容性问题 解决方法详见https://segmentfault.com/q/1010000007439070?_ea=1345861) ;
    2 form表单元素想要传递文件需要加入Multipart/form-data
 
  var i = formData.entries();
  i.next();
  i.next();
//或者下面是等效的
for(var item of formData.entries()){
  console.log(item[0]+','+item[1]);
  }
利用formdata进行图片文件上传时 ,当图片文件 为空时 ,会传入一个文件流,后台可能没有办法判断该数据是否为空,这就需要前端验证空参数时不传对应值
可以利用formdata一项一项添加来修改上面的小bug
 var fd = new FormData();
var postTitleVal = $('#titleId').val();
var imgfileVal = $('#imgfile')[0].files;
var postContentVal = $('#body_text').val(); fd.append("postTitle",postTitleVal);
//注意下面的添加图片,当为多个时,一定要一个一个进行添加,否则不会正确的传值,如下面的图片所示
for(var i = 0;i < imgfileVal.length;i++){
fd.append("imgfile",imgfileVal[i]);
}
fd.append("postContent",postContentVal);
return fd;

当多图片时不进行一个一个添加时会显示下面的结果,传给后台的是一个不能识别的object

------WebKitFormBoundarye3BrkT7fRq8QF9FF

Content-Disposition: form-data; name="imgfile"

[object FileList]

当直接用var fd = new Formdate()时,有图片有选择时如下可以正常的进行传输

------WebKitFormBoundaryv1LffBUkzjtPjHxQ
Content-Disposition: form-data; name="imgfile"; filename="Koala.jpg"
Content-Type: image/jpeg
------WebKitFormBoundaryv1LffBUkzjtPjHxQ
Content-Disposition: form-data; name="imgfile"; filename="Lighthouse.jpg"
Content-Type: image/jpeg 当不选图片时(即空参数),会传入一个 文件流,后台可能没有办法判断该数据是否为空,可能会造成页面图片显示空白的bug
------WebKitFormBoundaryABIeO4Mf7StP4CdB
Content-Disposition: form-data; name="imgfile"; filename=""
Content-Type: application/octet-stream
 
详见:
https://developer.mozilla.org/zh-CN/docs/Web/API/FormData/Using_FormData_Objects
https://segmentfault.com/a/1190000006716454#articleHeader11
详见  http://blog.csdn.net/xiaojianpitt/article/details/6856536
 
form表单元素想要传递文件一定注意需要加入Multipart/form-data
 

总结:上传数据格式常用的有:

1 请求字符串 name=value&age=3的形式;

   2 json对象形式;

   3 formData对象格式;

当然也可以有其他类型,详见http://www.cnblogs.com/haitao-fan/p/3908973.html

https://developer.mozilla.org/en-US/docs/Web/API/FormData/entries

easyui form提交和formdata提交记录的更多相关文章

  1. 【JavaScript】EasyUIのForm的跨域提交问题解析

    昨日.プログラムを作るとき.一つの問題がありますが.皆に共有します. [問題] EasyUIのFormでURLを請求するとき.返却の値が取得できない. [ソース] var fnRegUser = fu ...

  2. EasyUI Form提交后json数据IE上需要下载(转)

    EasyUI Form提交后json数据IE上需要下载(转)   在使用EasyUI的form中的submit方法时,返回json在IE中变成提示下载的问题,代码如下: $('#fileForm'). ...

  3. js阻止form表单重复提交

    防止表单重复提交的方法总体来说有两种,一种是在js中阻止重复提交:另一种是在后台利用token令牌实现,大致思路是生成一个随机码放到session和form表单的隐藏输入框中,提交表单时两者对比,表单 ...

  4. form表单action提交表单,页面不跳转且表单数据含文件的处理方法

    在最近的项目中需要将含 input[type='file']的表单提交给后台 ,并且后台需要将文件存储在数据库中.之前所用的方法都是先将文件上传到七牛服务器上,然后七牛会返回文件的下载地址,在提交表单 ...

  5. 使用ajax方法实现form表单的提交(附源码)

    写在前面的话 在使用form表单的时候,一旦点击提交触发submit事件,一般会使得页面跳转,页面间的跳转等行为的控制权往往在后端,后端会控制页面的跳转及数据传递,但是在某些时候不希望页面跳转,或者说 ...

  6. 使用ajax方法实现form表单的提交

    作者:13 GitHub:https://github.com/ZHENFENG13 版权声明:本文为原创文章,未经允许不得转载. 写在前面的话 在使用form表单的时候,一旦点击提交触发submit ...

  7. 雷林鹏分享:jQuery EasyUI 表单 - 创建异步提交表单

    jQuery EasyUI 表单 - 创建异步提交表单 本教程向您展示如何通过 easyui 提交一个表单(Form).我们创建一个带有 name.email 和 phone 字段的表单.通过使用 e ...

  8. element ui axios使用formdata提交数据

    axios({ //formdata提交 headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, transformRequ ...

  9. 表单提交 multipart/form-data 和 x-www-form-urlencoded的区别

    表单提交表单有两种提交方式,POST和GET.通常我们会使用POST方式,一是因为形式上的安全 :二是可以上传文件. 我之前经常忽略掉表单的编码类型,觉得它特别长比较难记,而且不设置也似乎不影响什么. ...

随机推荐

  1. Oracle(1)之虚拟机下安装与简单使用

    Oracle介绍与安装 简介 Oracle 数据库系统是美国 ORACLE 公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器 (CLIENT/SERVER) 或 B/ ...

  2. 64位的pyd报"ImportError: No module named"错误

    今天仿照32位的ModuleA.cp35-win32.pyd,制作了64位的pyd.很随意地命名为ModuleA.cp35-win64.pyd,然后在64环境里编译.发现一直报"Import ...

  3. crm 理解

    1:crm 就是一个 能够随时(通过labtop,mobile phone)掌握客户所有信息(过往的交易,)的工具.  通过足够的数据分析,能够更好的了解客户. 目的: a:使客户保留下来. b:赚取 ...

  4. C语言数据类型运算法则

    整形与整形运算得到的还是整形 printf("%d\n",1/3); //0 printf("%d\n",1+2); //3 整形与浮点型运算得到浮点型数据 p ...

  5. Angular1和Aangular4剖析

    字面解析: 1.Angular1又名angularJs,从angular2,angular4都不带JS 2.变化:angular2跳转到angular4 架构: 1.angular1是基于MVC 2. ...

  6. [LeetCode] 584. Find Customer Referee_Easy tag: SQL

    Given a table customer holding customers information and the referee. +------+------+-----------+ | ...

  7. python datatype

    解释性语言,有类型的概念,没有类型的实体 所以,类型很重要 今天,我在这里练练python的类型 //test.py print int("10", 8) #8 scaleprin ...

  8. vue中computed和watch的写法,以及区别

    <template> <div class="print"> <div style="color: red"> <p ...

  9. 答案在哪里?action config/Interceptor/class/servlet

    项目已提测,这两天我们都集中精力梳理外包团队给我司研发的这个三方支付系统的代码逻辑.今天下午爱琴海会议室,开发组里一同学分享他对支付结果回调的梳理成果. 支付结果回调的整体时序是:支付渠道方处理完用户 ...

  10. jQuery-图片放大镜

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...