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或更新版本

      

  • 相关阅读:
    ECharts之柱状图 饼状图 折线图
    Vue自定义指令(directive)
    HDU 1231 最大连续子序列
    POJ 2533 Longest Ordered Subsequence
    HDU 1163 Eddy's digital Roots
    HDU 2317 Nasty Hacks
    HDU 2571 命运
    HDU 4224 Enumeration?
    HDU 1257 最少拦截系统
    HDU 2740 Root of the Problem
  • 原文地址:https://www.cnblogs.com/javahr/p/9248386.html
Copyright © 2011-2022 走看看