zoukankan      html  css  js  c++  java
  • FormData序列化及file文件上传

    表单数据上传

    情况一:

      一、当表单文件处于无任何处理状态时,用submit提交直接上传; 但这种方式上传,数据无任何处理;(极少使用);

      但是传统的表单提交会导致页面刷新,但是有些情况下,我们并不希望页面被刷新,这种时候,我们都是使用ajax的方法进行请求的

    情况二:

      二、当表单文件使用$.ajax上传,表单中无file文件上传时,数据要进行序列化处理,要将表单中的数据转为json数据格式

      1、序列化serialize()方法 重点内容

      格式:var data=$("#formid").serialize();,其中formid为表单id

      功能:将表单内容序列化成一个json结构的对象,注意不是json字符串。

      比如,[{"name":"lihui", "age":"20"},{...}] 获取数据为 jsonData[0].name

      这样在ajax提交表单数据的时候,就不用一一列举出每一个参数。主需要将data参数设置为 $("#formid").serialize() 即可。

      例子

    <form id="submit_form">  
      <input type="text" name="text" value="姓名"/>
      <pre name="code" class="html">       
      <input type="url" name="url" value="网址"/> <input type="email" name="email" value="电子邮件"/>   <input type="button" value="submit"id="submit" />
    </form> //提交方法 var formData=$("#submit_form").serialize(); $.ajax({ type : 'POST', url : url地址, data : formData,或者data:{$("#submit_form").serialize()},或者单个的参数data:{name:'value'} async : false, cache : false, contentType : false, processData : false, success : function(data) { //关闭弹框 alert("成功"); }, error : function(data) { alert("error!"); } }); //序列化表单对象

      注意:通过$("#submit_form").serialize();可以对表单进行序列化,从而将form表单中的所有参数传递到服务端。但是上述方式,只能传递一般的参数,上传文件的文件流是无法被序列化并传递的。

      

    情况三 

      二、当表单文件使用$.ajax上传,表单中有file文件上传时,表单序列化将无法传递文件流。不过如今主流浏览器都开始支持一个叫做FormData的对象,有了这个FormData,我们就可以轻松地使用ajax进行文件上传了。

      1、FormData方法介绍

      XMLHttpRequest Level 2添加了一个新的接口FormData.利用FormData对象,我们可以通过JavaScript用一些键值对来模拟一系列表单控件,我们还可以使用XMLHttpRequest的send()方法来异步的提交这个”表单”.比起普通的ajax,使用FormData的最大优点就是我们可以异步上传一个二进制文件。

      所有主流浏览器的较新版本都已经支持这个对象了,比如Chrome 7+、Firefox 4+、IE 10+、Opera 12+、Safari 5+。

      参见:https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest/FormData

      先要将表单序列化 定义一个变量存储并处理表单

      例子:

    <form enctype="multipart/form-data" method="post" id="表单ID">
    var formdata=new FormData($("#表单ID")[0]);
    $.ajax({
        url : url,
        type : 'POST',
        data : formData,
        async : false,
        cache : false,
        contentType : false,
        processData : false,
        success : function(data) {
             //上传成功
             alert("成功");
        },
        error : function(data) {
              alert("添加失败!");
        }
    }); //序列化表单对象

      参见:https://developer.mozilla.org/zh-CN/docs/Web/Guide/Using_FormData_Objects

      使用FormData,进行Ajax请求并上传文件

      这里使用JQuery,但是老版本的JQuery比如1.2是不支持的,最好使用2.0或更新版本

      

  • 相关阅读:
    62、solidity环境搭建、编译及编写合约-3——2020年07月12日12:55:51
    61、solidity编程语言类型-2——2020年07月12日12:26:21
    60、solidity编程语言了解、实践-1——2020年07月12日12:01:12
    C#windows桌面应用小程序制作——大文件数据分段解析存储
    关于如何使用ehcarts2加载svg矢量地图并自定义县级内部乡镇轮廓
    webstorm2016.3注册码,License server更新方式,webstorm2017.1版本可用
    使用nodeValue获取值与a标签默认跳转的冲突问题
    前端知识体系目录
    sweetalert弹窗的使用
    background-size的应用情景:当给出的背景图片大于实际网页需要布局的图片大小时
  • 原文地址:https://www.cnblogs.com/javahr/p/9248386.html
Copyright © 2011-2022 走看看