formdata 的前世今生

前言

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

看下简介:

FormData 接口提供了一种表示表单数据的键值对的构造方式,经过它的数据可以使用 XMLHttpRequest.send() 方法送出,本接口和此方法都相当简单直接。如果送出时的编码类型被设为 "multipart/form-data",它会使用和表单一样的格式。

如果你想构建一个简单的GET请求,并且通过
的形式带有查询参数,可以将它直接传递给URLSearchParams。 实现了 FormData 接口的对象可以直接在for...of结构中使用,而不需要调用entries() : for (var p of myFormData) 的作用和 for (var p of myFormData.entries()) 是相同的。

正文

为什么会产生这个formdata呢?

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

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

这时候formdata的作用就来了。

  

    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.
"; } }; 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:


	

指定文件名:

上传文件:

结果为:
formdata 的前世今生_第1张图片

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

formdata 的前世今生_第2张图片

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

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

你可能感兴趣的:(formdata 的前世今生)