• formdata 的前世今生


    前言

    为什么会产生formdata这东西呢?

    看下简介:

    FormData 接口提供了一种表示表单数据的键值对的构造方式,经过它的数据可以使用 XMLHttpRequest.send() 方法送出,本接口和此方法都相当简单直接。如果送出时的编码类型被设为 "multipart/form-data",它会使用和表单一样的格式。
    
    如果你想构建一个简单的GET请求,并且通过<form>的形式带有查询参数,可以将它直接传递给URLSearchParams。
    
    实现了 FormData 接口的对象可以直接在for...of结构中使用,而不需要调用entries() : for (var p of myFormData) 的作用和 for (var p of myFormData.entries()) 是相同的。
    

    正文

    为什么会产生这个formdata呢?

    在这之前呢,我们会发现一个问题,我们提交form表单的时候会刷新这个页面,但是呢,后来都希望不刷新页面。

    后来别人通过系列化form表单的数据来传递,但是问题又出现了,这时候出现了文件要上传啊。

    这时候formdata的作用就来了。

     <form enctype="multipart/form-data" method="post" name="fileinfo"> 
    
        var oData = new FormData(document.forms.namedItem("fileinfo" ));  
        oData.append( "CustomField", "This is some extra data" );  
        var oReq = new XMLHttpRequest();  
        oReq.open( "POST", "stash.php" , true );  
        oReq.onload = function(oEvent) {  
              if (oReq.status == 200) {  
                  oOutput.innerHTML = "Uploaded!" ;  
             } else {  
                  oOutput.innerHTML = "Error " + oReq.status + " occurred uploading your file.<br />";  
             }  
        };  
        oReq.send(oData);  
    

    用户可通过这种方式来实现文件上传。

    那么上传后的形式是啥?

    code:

    use strict";
    function doUpload() {
    	var formData = new FormData($("#uploadForm")[0]);
    	$.ajax({
    		url: 'http://localhost:8082/cfJAX_RS/rest/file/upload',
    		type: 'POST',
    		data: formData,
    		async: false,
    		cache: false,
    		contentType: false,
    		processData: false,
    		success: function (returndata) {
    			alert(returndata);
    		},
    		error: function (returndata) {
    			alert(returndata);
    		}
    	});
    }
    

    div:

    <form id="uploadForm">
    	<p>指定文件名: <input type="text" name="filename" value="" /></p>
    	<p>上传文件: <input type="file" name="file" /></p>
    		<input type="button" value="上传" onclick="doUpload()" />
    </form>
    

    结果为:

    在看下传输json是怎么样的。

    json 传输是无法传输二进制流的。而formdata实际上可以用来模拟form表单提交,而不用去刷新。

    formdata 给我们带来了很多方便,我们可以动态去添加和删除一些东西,但是我们需要查看formdata兼容性。

  • 相关阅读:
    SQL Server2000的ROWGUID 列
    数据库主键设计之思考
    SQL Server 索引结构及其使用(四)
    一些基础表单的验证 函数
    JS加密编码算法
    textarea自动增高并隐藏滚动条
    HTML之打开/另存为/打印/刷新/查看原文件等按钮的代码
    Code Snippets
    jQuery验证框架
    Jquery 扩展验证
  • 原文地址:https://www.cnblogs.com/aoximin/p/12961763.html
Copyright © 2020-2023  润新知