JavaScript 객체에서 FormData 사용

一个新手
풀어 주다: 2017-09-06 13:20:19
원래의
1923명이 탐색했습니다.

FormData 개체 사용

이 문서에서

  1. FormData 개체를 만드는 방법

  2. HTML 양식을 통해 FormData 개체 만들기

  3. FormData 개체를 사용하여 파일 업로드

  4. 양식 제출 및 파일 업로드 AJAX FormData 개체를 사용할 필요는 없습니다

  5. 관련 링크


FormData 개체는 XMLHttpRequest를 사용하여 요청을 보내기 위한 키/값 쌍 세트를 조립하는 데 사용할 수 있습니다. . 양식과 독립적으로 사용할 수 있으므로 양식 데이터를 보다 유연하고 편리하게 보낼 수 있습니다. 양식의 인코딩 유형을 multipart/form-data로 설정하면 FormData를 통해 전송되는 데이터 형식은 submit() 메서드XMLHttpRequest发送请求的键/值对。它可以更灵活方便的发送表单数据,因为可以独立于表单使用。如果你把表单的编码类型设置为multipart/form-data ,则通过FormData传输的数据格式和表单通过submit() 方法传输的数据格式相同

如何创建一个FormData对象Edit

你可以自己创建一个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 = '<a id="a"><b id="b">hey!</b></a>'; // 新文件的正文...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 对象的字段类型可以是 BlobFile, 或者 string: 如果它的字段类型不是Blob也不是File,则会被转换成字符串类型。

上面的示例创建了一个FormData实例,包含"username", "accountnum", "userfile" 和 "webmasterfile"四个字段,然后使用XMLHttpRequestsend()方法发送表单数据。字段 "webmasterfile" 是 Blob类型。一个 Blob对象表示一个不可变的, 原始数据的类似文件对象。Blob表示的数据不一定是一个JavaScript原生格式。 File 接口基于Blob,继承 blob功能并将其扩展为支持用户系统上的文件。你可以通过 Blob() 构造函数创建一个Blob对象。

通过HTML表单创建FormData对象Edit

想要构造一个包含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对象上传文件Edit

你还可以使用FormData上传文件。使用的时候需要在表单中添加一个文件类型的input:


<form enctype="multipart/form-data" method="post" name="fileinfo">
  <label>Your email address:</label>
  <input type="email" autocomplete="on" autofocus name="userid" placeholder="email" required size="32" maxlength="64" /><br />
  <label>Custom file label:</label>
  <input type="text" name="filelabel" size="12" maxlength="32" /><br />
  <label>File to stash:</label>
  <input type="file" name="file" required />
  <input type="submit" value="Stash the file!" /></form><p></p>
로그인 후 복사

然后使用下面的代码发送请求:


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.<br \/>";
    }
  };

  oReq.send(oData);
  ev.preventDefault();
}, false);
로그인 후 복사


注意:如果FormData对象是通过表单创建的,则表单中指定的请求方式会被应用到方法open()中 。

你还可以直接向FormData对象附加File或Blob类型的文件,如下所示:

data.append("myfile", myBlob, "filename.txt");
로그인 후 복사

使用appned()方法时,可以通过第三个可选参数设置发送请求的头 Content-Disposition

FormData 개체를 만드는 방법수정

다음을 수행할 수 있습니다. FormData 개체를 직접 만든 다음 다음과 같이 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이 아닌 경우

위의 예에서는 "username", "accountnum", "userfile" 및 "webmasterfile"이라는 네 개의 필드가 포함된 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!