Giao diện Bạn cũng có thể chuyển nó trực tiếp cho hàm tạo FormData
cung cấp một cách để dễ dàng xây dựng một tập hợp các cặp khóa/giá trị biểu thị các trường biểu mẫu và các giá trị của chúng, sau đó có thể dễ dàng gửi bằng phương thức fetch[]
hoặc XMLHttpRequest.send[]
. Nó sử dụng cùng một định dạng Một biểu mẫu sẽ sử dụng nếu loại mã hóa được đặt thành "multipart/form-data"
.FormData
interface provides a way to easily construct a set of key/value pairs representing form fields and their values, which can then be easily sent using the fetch[]
or XMLHttpRequest.send[]
method. It uses the same format a form would use if
the encoding type were set to "multipart/form-data"
.
0 nếu bạn muốn tạo các tham số truy vấn theo cách mà
formElem.onsubmit = async [e] => {
e.preventDefault[];
let response = await fetch['/article/formdata/post/user', {
method: 'POST',
body: new FormData[formElem]
}];
let result = await response.json[];
alert[result.message];
};
1 sẽ làm nếu sử dụng gửi đơn giản
formElem.onsubmit = async [e] => {
e.preventDefault[];
let response = await fetch['/article/formdata/post/user', {
method: 'POST',
body: new FormData[formElem]
}];
let result = await response.json[];
alert[result.message];
};
2.
formElem.onsubmit = async [e] => {
e.preventDefault[];
let response = await fetch['/article/formdata/post/user', {
method: 'POST',
body: new FormData[formElem]
}];
let result = await response.json[];
alert[result.message];
};
Một đối tượng thực hiện FormData
có thể được sử dụng trực tiếp trong cấu trúc
formElem.onsubmit = async [e] => {
e.preventDefault[];
let response = await fetch['/article/formdata/post/user', {
method: 'POST',
body: new FormData[formElem]
}];
let result = await response.json[];
alert[result.message];
};
4, thay vì
formElem.onsubmit = async [e] => {
e.preventDefault[];
let response = await fetch['/article/formdata/post/user', {
method: 'POST',
body: new FormData[formElem]
}];
let result = await response.json[];
alert[result.message];
};
5:
formElem.onsubmit = async [e] => {
e.preventDefault[];
let response = await fetch['/article/formdata/post/user', {
method: 'POST',
body: new FormData[formElem]
}];
let result = await response.json[];
alert[result.message];
};
6 tương đương với
formElem.onsubmit = async [e] => {
e.preventDefault[];
let response = await fetch['/article/formdata/post/user', {
method: 'POST',
body: new FormData[formElem]
}];
let result = await response.json[];
alert[result.message];
};
7.Lưu ý: Tính năng này có sẵn trong các nhân viên web. This feature is available in Web Workers.
Người xây dựng
formElem.onsubmit = async [e] => {
e.preventDefault[];
let response = await fetch['/article/formdata/post/user', {
method: 'POST',
body: new FormData[formElem]
}];
let result = await response.json[];
alert[result.message];
};
8Tạo một đối tượng FormData
mới.
Phương pháp thể hiện
let formData = new FormData[];
formData.append['key1', 'value1'];
formData.append['key2', 'value2'];
// List key/value pairs
for[let [name, value] of formData] {
alert[`${name} = ${value}`]; // key1 = value1, then key2 = value2
}
0Lối nhiều giá trị mới vào một khóa hiện có bên trong đối tượng FormData
hoặc thêm khóa nếu nó chưa tồn tại.
let formData = new FormData[];
formData.append['key1', 'value1'];
formData.append['key2', 'value2'];
// List key/value pairs
for[let [name, value] of formData] {
alert[`${name} = ${value}`]; // key1 = value1, then key2 = value2
}
2Xóa một cặp khóa/giá trị khỏi đối tượng FormData
.
let formData = new FormData[];
formData.append['key1', 'value1'];
formData.append['key2', 'value2'];
// List key/value pairs
for[let [name, value] of formData] {
alert[`${name} = ${value}`]; // key1 = value1, then key2 = value2
}
4Trả về một tererator lặp lại thông qua tất cả các cặp khóa/giá trị có trong FormData
.
let formData = new FormData[];
formData.append['key1', 'value1'];
formData.append['key2', 'value2'];
// List key/value pairs
for[let [name, value] of formData] {
alert[`${name} = ${value}`]; // key1 = value1, then key2 = value2
}
6Trả về giá trị đầu tiên được liên kết với một khóa đã cho từ trong một đối tượng FormData
.
let formData = new FormData[];
formData.append['key1', 'value1'];
formData.append['key2', 'value2'];
// List key/value pairs
for[let [name, value] of formData] {
alert[`${name} = ${value}`]; // key1 = value1, then key2 = value2
}
8Trả về một mảng của tất cả các giá trị được liên kết với một khóa đã cho từ trong vòng FormData
.
Picture:
formElem.onsubmit = async [e] => {
e.preventDefault[];
let response = await fetch['/article/formdata/post/user-avatar', {
method: 'POST',
body: new FormData[formElem]
}];
let result = await response.json[];
alert[result.message];
};
0Trả về xem một đối tượng FormData
có chứa một khóa nhất định.
Picture:
formElem.onsubmit = async [e] => {
e.preventDefault[];
let response = await fetch['/article/formdata/post/user-avatar', {
method: 'POST',
body: new FormData[formElem]
}];
let result = await response.json[];
alert[result.message];
};
2Trả về một trình lặp lặp đi lặp lại thông qua tất cả các khóa của các cặp khóa/giá trị có trong FormData
.
Picture:
formElem.onsubmit = async [e] => {
e.preventDefault[];
let response = await fetch['/article/formdata/post/user-avatar', {
method: 'POST',
body: new FormData[formElem]
}];
let result = await response.json[];
alert[result.message];
};
4Đặt một giá trị mới cho một khóa hiện có bên trong đối tượng FormData
hoặc thêm khóa/giá trị nếu nó chưa tồn tại.
Picture:
formElem.onsubmit = async [e] => {
e.preventDefault[];
let response = await fetch['/article/formdata/post/user-avatar', {
method: 'POST',
body: new FormData[formElem]
}];
let result = await response.json[];
alert[result.message];
};
6Trả về một trình lặp lặp lại thông qua tất cả các giá trị có trong FormData
.
Thông số kỹ thuật
Xmlhttprequest tiêu chuẩn # giao diện-pormdata # interface-formdata |
Tính tương thích của trình duyệt web
Bảng BCD chỉ tải trong trình duyệt
Xem thêm
Chương này là về việc gửi các biểu mẫu HTML: có hoặc không có tệp, với các trường bổ sung, v.v. Các đối tượng FormData có thể giúp với điều đó. Như bạn có thể đoán, nó là đối tượng để thể hiện dữ liệu biểu mẫu HTML. Hàm tạo là:let formData = new FormData[[form]];
Nếu phần tử HTML
Picture:
formElem.onsubmit = async [e] => {
e.preventDefault[];
let response = await fetch['/article/formdata/post/user-avatar', {
method: 'POST',
body: new FormData[formElem]
}];
let result = await response.json[];
alert[result.message];
};
8 được cung cấp, nó sẽ tự động nắm bắt các trường của nó.Điều đặc biệt về FormData
là các phương thức mạng, chẳng hạn như
canvasElem.onmousemove = function[e] {
let ctx = canvasElem.getContext['2d'];
ctx.lineTo[e.clientX, e.clientY];
ctx.stroke[];
};
async function submit[] {
let imageBlob = await new Promise[resolve => canvasElem.toBlob[resolve, 'image/png']];
let formData = new FormData[];
formData.append["firstName", "John"];
formData.append["image", imageBlob, "image.png"];
let response = await fetch['/article/formdata/post/image-form', {
method: 'POST',
body: formData
}];
let result = await response.json[];
alert[result.message];
}
0, có thể chấp nhận một đối tượng FormData
như một cơ thể. Nó được mã hóa và gửi ra với
canvasElem.onmousemove = function[e] {
let ctx = canvasElem.getContext['2d'];
ctx.lineTo[e.clientX, e.clientY];
ctx.stroke[];
};
async function submit[] {
let imageBlob = await new Promise[resolve => canvasElem.toBlob[resolve, 'image/png']];
let formData = new FormData[];
formData.append["firstName", "John"];
formData.append["image", imageBlob, "image.png"];
let response = await fetch['/article/formdata/post/image-form', {
method: 'POST',
body: formData
}];
let result = await response.json[];
alert[result.message];
}
2.Từ quan điểm máy chủ, trông giống như một bản gửi biểu mẫu thông thường.
Gửi một biểu mẫu đơn giản
Hãy để gửi một hình thức đơn giản trước.
Như bạn có thể thấy, đó là gần như một lớp lót:
formElem.onsubmit = async [e] => {
e.preventDefault[];
let response = await fetch['/article/formdata/post/user', {
method: 'POST',
body: new FormData[formElem]
}];
let result = await response.json[];
alert[result.message];
};
Trong ví dụ này, mã máy chủ không được trình bày, vì nó vượt quá phạm vi của chúng tôi. Máy chủ chấp nhận yêu cầu POST và trả lời người dùng đã lưu.
Phương pháp FormData
Chúng ta có thể sửa đổi các trường trong FormData
bằng các phương thức:
4 - Thêm trường biểu mẫu vớicanvasElem.onmousemove = function[e] { let ctx = canvasElem.getContext['2d']; ctx.lineTo[e.clientX, e.clientY]; ctx.stroke[]; }; async function submit[] { let imageBlob = await new Promise[resolve => canvasElem.toBlob[resolve, 'image/png']]; let formData = new FormData[]; formData.append["firstName", "John"]; formData.append["image", imageBlob, "image.png"]; let response = await fetch['/article/formdata/post/image-form', { method: 'POST', body: formData }]; let result = await response.json[]; alert[result.message]; }
5 vàcanvasElem.onmousemove = function[e] { let ctx = canvasElem.getContext['2d']; ctx.lineTo[e.clientX, e.clientY]; ctx.stroke[]; }; async function submit[] { let imageBlob = await new Promise[resolve => canvasElem.toBlob[resolve, 'image/png']]; let formData = new FormData[]; formData.append["firstName", "John"]; formData.append["image", imageBlob, "image.png"]; let response = await fetch['/article/formdata/post/image-form', { method: 'POST', body: formData }]; let result = await response.json[]; alert[result.message]; }
6 đã chocanvasElem.onmousemove = function[e] { let ctx = canvasElem.getContext['2d']; ctx.lineTo[e.clientX, e.clientY]; ctx.stroke[]; }; async function submit[] { let imageBlob = await new Promise[resolve => canvasElem.toBlob[resolve, 'image/png']]; let formData = new FormData[]; formData.append["firstName", "John"]; formData.append["image", imageBlob, "image.png"]; let response = await fetch['/article/formdata/post/image-form', { method: 'POST', body: formData }]; let result = await response.json[]; alert[result.message]; }
7 - Thêm một trường như thể nó làcanvasElem.onmousemove = function[e] { let ctx = canvasElem.getContext['2d']; ctx.lineTo[e.clientX, e.clientY]; ctx.stroke[]; }; async function submit[] { let imageBlob = await new Promise[resolve => canvasElem.toBlob[resolve, 'image/png']]; let formData = new FormData[]; formData.append["firstName", "John"]; formData.append["image", imageBlob, "image.png"]; let response = await fetch['/article/formdata/post/image-form', { method: 'POST', body: formData }]; let result = await response.json[]; alert[result.message]; }
8, đối số thứ bacanvasElem.onmousemove = function[e] { let ctx = canvasElem.getContext['2d']; ctx.lineTo[e.clientX, e.clientY]; ctx.stroke[]; }; async function submit[] { let imageBlob = await new Promise[resolve => canvasElem.toBlob[resolve, 'image/png']]; let formData = new FormData[]; formData.append["firstName", "John"]; formData.append["image", imageBlob, "image.png"]; let response = await fetch['/article/formdata/post/image-form', { method: 'POST', body: formData }]; let result = await response.json[]; alert[result.message]; }
9 đặt tên tệp [không phải tên trường biểu mẫu], vì nó là tên của tệp trong hệ thống tập tin của người dùng,canvasElem.onmousemove = function[e] { let ctx = canvasElem.getContext['2d']; ctx.lineTo[e.clientX, e.clientY]; ctx.stroke[]; }; async function submit[] { let imageBlob = await new Promise[resolve => canvasElem.toBlob[resolve, 'image/png']]; let formData = new FormData[]; formData.append["firstName", "John"]; formData.append["image", imageBlob, "image.png"]; let response = await fetch['/article/formdata/post/image-form', { method: 'POST', body: formData }]; let result = await response.json[]; alert[result.message]; }
0 - Xóa trường vớiformData.append["image", imageBlob, "image.png"];
5 đã cho,canvasElem.onmousemove = function[e] { let ctx = canvasElem.getContext['2d']; ctx.lineTo[e.clientX, e.clientY]; ctx.stroke[]; }; async function submit[] { let imageBlob = await new Promise[resolve => canvasElem.toBlob[resolve, 'image/png']]; let formData = new FormData[]; formData.append["firstName", "John"]; formData.append["image", imageBlob, "image.png"]; let response = await fetch['/article/formdata/post/image-form', { method: 'POST', body: formData }]; let result = await response.json[]; alert[result.message]; }
2 - Nhận giá trị của trường vớiformData.append["image", imageBlob, "image.png"];
5 đã cho,canvasElem.onmousemove = function[e] { let ctx = canvasElem.getContext['2d']; ctx.lineTo[e.clientX, e.clientY]; ctx.stroke[]; }; async function submit[] { let imageBlob = await new Promise[resolve => canvasElem.toBlob[resolve, 'image/png']]; let formData = new FormData[]; formData.append["firstName", "John"]; formData.append["image", imageBlob, "image.png"]; let response = await fetch['/article/formdata/post/image-form', { method: 'POST', body: formData }]; let result = await response.json[]; alert[result.message]; }
4 - Nếu tồn tại một trường vớiformData.append["image", imageBlob, "image.png"];
5 đã cho, trả vềcanvasElem.onmousemove = function[e] { let ctx = canvasElem.getContext['2d']; ctx.lineTo[e.clientX, e.clientY]; ctx.stroke[]; }; async function submit[] { let imageBlob = await new Promise[resolve => canvasElem.toBlob[resolve, 'image/png']]; let formData = new FormData[]; formData.append["firstName", "John"]; formData.append["image", imageBlob, "image.png"]; let response = await fetch['/article/formdata/post/image-form', { method: 'POST', body: formData }]; let result = await response.json[]; alert[result.message]; }
6, nếu khôngformData.append["image", imageBlob, "image.png"];
7formData.append["image", imageBlob, "image.png"];
Một biểu mẫu được phép về mặt kỹ thuật để có nhiều trường có cùng
canvasElem.onmousemove = function[e] {
let ctx = canvasElem.getContext['2d'];
ctx.lineTo[e.clientX, e.clientY];
ctx.stroke[];
};
async function submit[] {
let imageBlob = await new Promise[resolve => canvasElem.toBlob[resolve, 'image/png']];
let formData = new FormData[];
formData.append["firstName", "John"];
formData.append["image", imageBlob, "image.png"];
let response = await fetch['/article/formdata/post/image-form', {
method: 'POST',
body: formData
}];
let result = await response.json[];
alert[result.message];
}
5, do đó, nhiều cuộc gọi đến formData.append["image", imageBlob, "image.png"];
9 thêm các trường giống nhau.Ngoài ra còn có phương pháp FormData
0, với cùng cú pháp với
formData.append["image", imageBlob, "image.png"];
9. Sự khác biệt là FormData
2 loại bỏ tất cả các trường với
canvasElem.onmousemove = function[e] {
let ctx = canvasElem.getContext['2d'];
ctx.lineTo[e.clientX, e.clientY];
ctx.stroke[];
};
async function submit[] {
let imageBlob = await new Promise[resolve => canvasElem.toBlob[resolve, 'image/png']];
let formData = new FormData[];
formData.append["firstName", "John"];
formData.append["image", imageBlob, "image.png"];
let response = await fetch['/article/formdata/post/image-form', {
method: 'POST',
body: formData
}];
let result = await response.json[];
alert[result.message];
}
5 đã cho, và sau đó nối thêm một trường mới. Vì vậy, nó đảm bảo có một trường chỉ có một trường có
canvasElem.onmousemove = function[e] {
let ctx = canvasElem.getContext['2d'];
ctx.lineTo[e.clientX, e.clientY];
ctx.stroke[];
};
async function submit[] {
let imageBlob = await new Promise[resolve => canvasElem.toBlob[resolve, 'image/png']];
let formData = new FormData[];
formData.append["firstName", "John"];
formData.append["image", imageBlob, "image.png"];
let response = await fetch['/article/formdata/post/image-form', {
method: 'POST',
body: formData
}];
let result = await response.json[];
alert[result.message];
}
5 như vậy, phần còn lại giống như formData.append["image", imageBlob, "image.png"];
9:FormData
6,FormData
7.
Ngoài ra, chúng tôi có thể lặp lại các trường formdata bằng cách sử dụng vòng lặp FormData
8:
let formData = new FormData[];
formData.append['key1', 'value1'];
formData.append['key2', 'value2'];
// List key/value pairs
for[let [name, value] of formData] {
alert[`${name} = ${value}`]; // key1 = value1, then key2 = value2
}
Gửi một biểu mẫu với một tệp
Biểu mẫu luôn được gửi dưới dạng
canvasElem.onmousemove = function[e] {
let ctx = canvasElem.getContext['2d'];
ctx.lineTo[e.clientX, e.clientY];
ctx.stroke[];
};
async function submit[] {
let imageBlob = await new Promise[resolve => canvasElem.toBlob[resolve, 'image/png']];
let formData = new FormData[];
formData.append["firstName", "John"];
formData.append["image", imageBlob, "image.png"];
let response = await fetch['/article/formdata/post/image-form', {
method: 'POST',
body: formData
}];
let result = await response.json[];
alert[result.message];
}
2, mã hóa này cho phép gửi các tệp. Vì vậy, các trường
canvasElem.onmousemove = function[e] {
let ctx = canvasElem.getContext['2d'];
ctx.lineTo[e.clientX, e.clientY];
ctx.stroke[];
};
async function submit[] {
let imageBlob = await new Promise[resolve => canvasElem.toBlob[resolve, 'image/png']];
let formData = new FormData[];
formData.append["firstName", "John"];
formData.append["image", imageBlob, "image.png"];
let response = await fetch['/article/formdata/post/image-form', {
method: 'POST',
body: formData
}];
let result = await response.json[];
alert[result.message];
}
8 cũng được gửi, tương tự như một bản gửi biểu mẫu thông thường.Ở đây, một ví dụ với hình thức như vậy:
Picture:
formElem.onsubmit = async [e] => {
e.preventDefault[];
let response = await fetch['/article/formdata/post/user-avatar', {
method: 'POST',
body: new FormData[formElem]
}];
let result = await response.json[];
alert[result.message];
};
Gửi một biểu mẫu với dữ liệu blob
Như chúng tôi đã thấy trong chương tìm nạp, nó dễ dàng gửi dữ liệu nhị phân được tạo động, ví dụ: một hình ảnh, như fetch[]
1. Chúng tôi có thể cung cấp nó trực tiếp dưới dạng tham số
canvasElem.onmousemove = function[e] {
let ctx = canvasElem.getContext['2d'];
ctx.lineTo[e.clientX, e.clientY];
ctx.stroke[];
};
async function submit[] {
let imageBlob = await new Promise[resolve => canvasElem.toBlob[resolve, 'image/png']];
let formData = new FormData[];
formData.append["firstName", "John"];
formData.append["image", imageBlob, "image.png"];
let response = await fetch['/article/formdata/post/image-form', {
method: 'POST',
body: formData
}];
let result = await response.json[];
alert[result.message];
}
0 fetch[]
3.Mặc dù vậy, trong thực tế, nó thường thuận tiện để gửi một hình ảnh không riêng biệt, nhưng là một phần của biểu mẫu, với các trường bổ sung, chẳng hạn như tên của tên và các siêu dữ liệu khác.
Ngoài ra, các máy chủ thường phù hợp hơn để chấp nhận các hình thức được mã hóa nhiều phần, thay vì dữ liệu nhị phân thô.
Ví dụ này gửi một hình ảnh từ fetch[]
4, cùng với một số trường khác, làm hình thức, sử dụng FormData
:
canvasElem.onmousemove = function[e] {
let ctx = canvasElem.getContext['2d'];
ctx.lineTo[e.clientX, e.clientY];
ctx.stroke[];
};
async function submit[] {
let imageBlob = await new Promise[resolve => canvasElem.toBlob[resolve, 'image/png']];
let formData = new FormData[];
formData.append["firstName", "John"];
formData.append["image", imageBlob, "image.png"];
let response = await fetch['/article/formdata/post/image-form', {
method: 'POST',
body: formData
}];
let result = await response.json[];
alert[result.message];
}
Xin lưu ý cách thêm hình ảnh fetch[]
1:
formData.append["image", imageBlob, "image.png"];
Điều đó giống như khi có fetch[]
7 trong biểu mẫu và khách truy cập đã gửi một tệp có tên fetch[]
8 [đối số thứ 3] với dữ liệu fetch[]
9 [đối số thứ 2] từ hệ thống tập tin của họ.
Máy chủ đọc dữ liệu biểu mẫu và tệp, như thể nó là một bản gửi biểu mẫu thông thường.
Bản tóm tắt
Các đối tượng FormData được sử dụng để nắm bắt biểu mẫu HTML và gửi nó bằng cách sử dụng
canvasElem.onmousemove = function[e] {
let ctx = canvasElem.getContext['2d'];
ctx.lineTo[e.clientX, e.clientY];
ctx.stroke[];
};
async function submit[] {
let imageBlob = await new Promise[resolve => canvasElem.toBlob[resolve, 'image/png']];
let formData = new FormData[];
formData.append["firstName", "John"];
formData.append["image", imageBlob, "image.png"];
let response = await fetch['/article/formdata/post/image-form', {
method: 'POST',
body: formData
}];
let result = await response.json[];
alert[result.message];
}
0 hoặc phương thức mạng khác.Chúng ta có thể tạo XMLHttpRequest.send[]
1 từ biểu mẫu HTML hoặc tạo một đối tượng mà không có biểu mẫu, sau đó nối các trường bằng các phương thức:
4canvasElem.onmousemove = function[e] { let ctx = canvasElem.getContext['2d']; ctx.lineTo[e.clientX, e.clientY]; ctx.stroke[]; }; async function submit[] { let imageBlob = await new Promise[resolve => canvasElem.toBlob[resolve, 'image/png']]; let formData = new FormData[]; formData.append["firstName", "John"]; formData.append["image", imageBlob, "image.png"]; let response = await fetch['/article/formdata/post/image-form', { method: 'POST', body: formData }]; let result = await response.json[]; alert[result.message]; }
7canvasElem.onmousemove = function[e] { let ctx = canvasElem.getContext['2d']; ctx.lineTo[e.clientX, e.clientY]; ctx.stroke[]; }; async function submit[] { let imageBlob = await new Promise[resolve => canvasElem.toBlob[resolve, 'image/png']]; let formData = new FormData[]; formData.append["firstName", "John"]; formData.append["image", imageBlob, "image.png"]; let response = await fetch['/article/formdata/post/image-form', { method: 'POST', body: formData }]; let result = await response.json[]; alert[result.message]; }
FormData
6FormData
7
Hãy lưu ý hai đặc thù ở đây:
- Phương thức
FormData
0 loại bỏ các trường có cùng tên,
9 không có. Đó là sự khác biệt duy nhất giữa họ.formData.append["image", imageBlob, "image.png"];
- Để gửi một tệp, cần phải có cú pháp 3-angument, đối số cuối cùng là tên tệp, thông thường được lấy từ hệ thống tập tin người dùng cho
8.canvasElem.onmousemove = function[e] { let ctx = canvasElem.getContext['2d']; ctx.lineTo[e.clientX, e.clientY]; ctx.stroke[]; }; async function submit[] { let imageBlob = await new Promise[resolve => canvasElem.toBlob[resolve, 'image/png']]; let formData = new FormData[]; formData.append["firstName", "John"]; formData.append["image", imageBlob, "image.png"]; let response = await fetch['/article/formdata/post/image-form', { method: 'POST', body: formData }]; let result = await response.json[]; alert[result.message]; }
Các phương pháp khác là:
0formData.append["image", imageBlob, "image.png"];
2formData.append["image", imageBlob, "image.png"];
4formData.append["image", imageBlob, "image.png"];
Đó là nó!