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兼容性。

原文地址:https://www.cnblogs.com/aoximin/p/12961763.html