이 문서에서
FormData 개체를 만드는 방법
HTML 양식을 통해 FormData 개체 만들기
FormData 개체를 사용하여 파일 업로드
양식 제출 및 파일 업로드 AJAX FormData 개체를 사용할 필요는 없습니다
관련 링크
FormData 개체는 XMLHttpRequest
를 사용하여 요청을 보내기 위한 키/값 쌍 세트를 조립하는 데 사용할 수 있습니다. . 양식과 독립적으로 사용할 수 있으므로 양식 데이터를 보다 유연하고 편리하게 보낼 수 있습니다. 양식의 인코딩 유형을 multipart/form-data로 설정하면 FormData를 통해 전송되는 데이터 형식은 submit()
메서드XMLHttpRequest
发送请求的键/值对。它可以更灵活方便的发送表单数据,因为可以独立于表单使用。如果你把表单的编码类型设置为multipart/form-data ,则通过FormData传输的数据格式和表单通过submit()
方法传输的数据格式相同
你可以自己创建一个FormData对象,然后通过调用它的append()
方法添加字段,就像这样:
var formData = new FormData(); formData.append("username", "Groucho"); formData.append("accountnum", 123456); // 数字 123456 会被立即转换成字符串 "123456"// HTML 文件类型input,由用户选择formData.append("userfile", fileInputElement.files[0]);// JavaScript file-like 对象var content = '975f881abd041d8a9a52113a3d7608728ad3eee38b36f0786840bfc85b25539ahey!0d36329ec37a2cc24d42c7229b69747a5db79b134e9f6b82c0b36e0489ee08ed'; // 新文件的正文...var blob = new Blob([content], { type: "text/xml"}); formData.append("webmasterfile", blob);var request = new XMLHttpRequest(); request.open("POST", "http://foo.com/submitform.php"); request.send(formData);
注意:字段 "userfile" 和 "webmasterfile" 都包含一个文件. 字段 "accountnum" 是数字类型,它将被FormData.append()
方法转换成字符串类型(FormData
对象的字段类型可以是 Blob
, File
, 或者 string: 如果它的字段类型不是Blob也不是File,则会被转换成字符串类型。
上面的示例创建了一个FormData
实例,包含"username", "accountnum", "userfile" 和 "webmasterfile"四个字段,然后使用XMLHttpRequest
的send()
方法发送表单数据。字段 "webmasterfile" 是 Blob
类型。一个 Blob对象表示一个不可变的, 原始数据的类似文件对象。Blob表示的数据不一定是一个JavaScript原生格式。 File
接口基于Blob,继承 blob功能并将其扩展为支持用户系统上的文件。你可以通过 Blob()
构造函数创建一个Blob对象。
想要构造一个包含Form表单数据的FormData对象,需要在创建FormData对象时指定表单的元素。
var formData = new FormData(someFormElement); 示例:var formElement = document.querySelector("form");var request = new XMLHttpRequest(); request.open("POST", "submitform.php"); request.send(new FormData(formElement));
你还可以在创建一个包含Form表单数据的FormData对象之后和发送请求之前,附加额外的数据到FormData对象里,像这样:
var formElement = document.querySelector("form");var formData = new FormData(formElement);var request = new XMLHttpRequest(); request.open("POST", "submitform.php"); formData.append("serialnumber", serialNumber++); request.send(formData);
这样你就可以在发送请求之前自由地附加不一定是用户编辑的字段到表单数据里
你还可以使用FormData上传文件。使用的时候需要在表单中添加一个文件类型的input:
ff146639ecf87721cba4be18b8688d52 2e1cf0710519d5598b1f0f14c36ba674Your email address:8c1ecd4bb896b2264e0711597d40766c fdd4de8b295fab4aa0708ba29a56a4f8ff9d32c555bb1d9133a29eb4371c1213 2e1cf0710519d5598b1f0f14c36ba674Custom file label:8c1ecd4bb896b2264e0711597d40766c 3c2750d34148cf8c03cc62edc6c563efff9d32c555bb1d9133a29eb4371c1213 2e1cf0710519d5598b1f0f14c36ba674File to stash:8c1ecd4bb896b2264e0711597d40766c 965e00529aa4b86d8dd68bfcdaa48288 5fa1d26c6939704a2c990d4281d4b44df5a47148e367a6035fd7a2faa965022ee388a4556c0f65e1904146cc1a846bee94b3e26ee717c64999d7867364b1b4a3
然后使用下面的代码发送请求:
var form = document.forms.namedItem("fileinfo"); form.addEventListener('submit', function(ev) { var oOutput = document.querySelector("p"), oData = new FormData(form); 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 when trying to upload your file.666a5bd9fab33f2f6688eb1baf827b5d"; } }; oReq.send(oData); ev.preventDefault(); }, false);
注意:如果FormData对象是通过表单创建的,则表单中指定的请求方式会被应用到方法open()中 。
你还可以直接向FormData对象附加File或Blob类型的文件,如下所示:
data.append("myfile", myBlob, "filename.txt");
使用appned()方法时,可以通过第三个可选参数设置发送请求的头 Content-Disposition
append()
메서드를 호출하여 필드를 추가합니다.
var fd = new FormData(document.querySelector("form")); fd.append("CustomField", "This is some extra data"); $.ajax({ url: "stash.php", type: "POST", data: fd, processData: false, // 不处理数据 contentType: false // 不设置内容类型});
참고:"userfile" 및 " webmasterfile" 필드에는 파일이 포함됩니다. "accountnum" 필드는 FormData.append()
메서드에 의해 문자열 유형으로 변환되는 숫자 유형입니다(필드). FormData
개체의 유형은 Blob
, File
또는 문자열일 수 있습니다. 해당 필드 유형이 Blob이나 File이 아닌 경우
FormData
인스턴스를 생성한 다음 XMLHttpRequest
>send() 메소드는 양식 데이터를 전송합니다. "webmasterfile" 필드는 Blob
유형입니다. Blob으로 표시되는 데이터는 반드시 JavaScript 기본 형식일 필요는 없으며 Blob 기능을 상속하고 이를 지원하도록 확장합니다. 사용자 시스템의 파일에 Blob() 생성자는 Blob 객체를 생성합니다. <p></p>
<h2 class="highlight-spanned"><span class="highlight-span"> HTML 양식을 통한 FormData 객체<span class="icon-pencil">편집</span></span></h2>
<br>양식 데이터가 포함된 FormData 객체를 생성하려면 FormData 객체를 생성할 때 양식을 작성합니다. 🎜🎜🎜rrreee🎜다음과 같이 Form 양식 데이터가 포함된 FormData 객체를 생성한 후 요청을 보내기 전에 FormData 객체에 추가 데이터를 추가할 수도 있습니다. 🎜🎜🎜🎜rrreee🎜이 방법으로 요청을 보낼 수 있습니다. 사용자가 편집할 수 없는 필드를 자유롭게 추가하여 데이터를 형성할 수 있었습니다🎜<h2 class="highlight-spanned"><span class="highlight-span">FormData 개체를 사용하여 파일 업로드<span class="icon -pencil">Edit</span></span></h2>🎜FormData를 사용하여 파일을 업로드할 수도 있습니다. 이를 사용할 때 양식에 파일 유형 입력을 추가해야 합니다: 🎜🎜🎜🎜rrreee🎜 그런 다음 다음 코드를 사용하여 요청을 보냅니다: 🎜🎜🎜🎜rrreee<p class="note">🎜🎜🎜<strong>참고: FormData 객체가 폼을 통해 생성되면 폼에 지정된 요청 메서드가 open() 메서드에 적용됩니다. 🎜🎜다음과 같이 File 또는 Blob 유형의 파일을 FormData 개체에 직접 첨부할 수도 있습니다. 🎜rrreee🎜appned() 메서드를 사용할 때 세 번째 선택적 매개변수인 <code>Content를 통해 전송된 요청의 헤더를 설정할 수 있습니다. -Disposition
파일 이름을 지정합니다. 파일 이름이 지정되지 않은 경우(또는 이 매개변수가 지원되지 않는 경우) "blob"이라는 이름이 사용됩니다. 🎜🎜올바른 구성 항목을 설정한 경우 jQuery를 통해 FormData 개체를 사용할 수도 있습니다. 🎜🎜🎜🎜rrreee🎜🎜🎜위 내용은 JavaScript 객체에서 FormData 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!